Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Json将带有两个对象的viewmodel传递给控制器_C#_Jquery_Ajax_Asp.net Mvc_Json - Fatal编程技术网

C# 使用Json将带有两个对象的viewmodel传递给控制器

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

这是我的密码。下面的JSON是不正确的,但我认为我很接近。控制器每次都获取空数据。任何帮助都将不胜感激

  $( "#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)。不,下面的答案是有效的。我不确定这是否是问题所在,但我想我会把它扔出去。很高兴有了一个简单的解决方案。