C# 使用Json将带有两个对象的viewmodel传递给控制器
这是我的密码。下面的JSON是不正确的,但我认为我很接近。控制器每次都获取空数据。任何帮助都将不胜感激C# 使用Json将带有两个对象的viewmodel传递给控制器,c#,jquery,ajax,asp.net-mvc,json,C#,Jquery,Ajax,Asp.net Mvc,Json,这是我的密码。下面的JSON是不正确的,但我认为我很接近。控制器每次都获取空数据。任何帮助都将不胜感激 $( "#btnRegister" ).click(function() { var personModel = { FirstName: $("#txtFirstName").val(), LastName: $("#txtLastName").val(), Phon
$( "#btnRegister" ).click(function() {
var personModel = {
FirstName: $("#txtFirstName").val(),
LastName: $("#txtLastName").val(),
Phone: $("#txtPhone").val(),
EmailAddress: $("#txtEmail").val()
};
var loginModel = {
UserName: $("#txtUserName").val(),
Password: $("#txtPassword").val()
};
var registerViewModel = {
WebUser: loginModel,
Person: personModel
};
$.ajax({
url: "@Url.Action("Register", "User")",
type: 'POST',
data: registerViewModel,
success: function(result) {
alert(result);
}
});
});
[HttpPost]
public JsonResult Register(RegisterViewModel registerViewModel)
{
string name = registerViewModel.Person.FirstName;
string username = registerViewModel.WebUser.UserName;
return Json(name);
}
public class RegisterViewModel
{
public WebUser WebUser { get; set; }
public Person Person { get; set; }
}
public class WebUser
{
[Key]
public string UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
public class Person
{
[Key]
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
public string EmailAddress { get; set; }
public string EmailConfirmation { get; set; }
public DateTime DateCreated { get; set; }
public string UserId { get; set; }
}
您似乎缺少正在搜索的ID前面的哈希值,除了
$("#txtFirstName").val(),
ajax部分需要如下所示
$.ajax({
url: "@Url.Action("Register", "User")",
type: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(registerViewModel),
success: function(result) {
alert(result);
}
});
希望这有帮助 对不起,我在格式化时把它们弄丢了。我刚刚添加了回去,但我在控制器处仍然为空。您可以共享WebUser和Person类定义吗?为您将它们添加到问题中。另外,如果我一次只发送一个类,而不是同时使用viewmodel类,JavaScript序列化程序可能不理解WebUser和Person类,那么它也可以正常工作。尝试将它们的声明放入RegisterViewModel类中。您是否考虑过ASP.NET无法处理对象反序列化的可能性?也许可以尝试一下,创建您自己的操作方法参数绑定逻辑(可能使用JSON.NET)。不,下面的答案是有效的。我不确定这是否是问题所在,但我想我会把它扔出去。很高兴有了一个简单的解决方案。