【问题标题】:Pass viewmodel with two objects to controller using Json使用 Json 将带有两个对象的视图模型传递给控制器
【发布时间】:2014-03-13 02:01:21
【问题描述】:

这是我的代码。下面的 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; }
}

【问题讨论】:

  • 您是否考虑过 ASP.NET 无法处理反序列化对象的可能性?也许试试这个answer 并创建自己的操作方法参数绑定逻辑(也许使用 JSON.NET)。
  • 否,下面的答案有效。
  • 不确定是否是问题所在,但我想我会把它扔掉。很高兴有一个简单的解决方案可用。

标签: c# jquery ajax asp.net-mvc json


【解决方案1】:

ajax部分需要这样

       $.ajax({
            url: "@Url.Action("Register", "User")",
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(registerViewModel),
            success: function(result) {
                alert(result);
            }
        });

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您似乎缺少要搜索的 id 前面的哈希,但

    除外
    $("#txtFirstName").val(),
    

    【讨论】:

    • 抱歉,我在格式化时丢失了它们。我刚加回来,但我在控制器上仍然为空
    • 你能分享一下 WebUser 和 Person 类的定义吗?
    • 已将它们添加到您的问题中。另外作为记录,当我一次发送一个类而不是为两者都使用视图模型类时,它确实工作正常
    • 也许 JavaScript 序列化程序不理解 WebUser 和 Person 类。尝试将他们的声明放在 RegisterViewModel 类中。
    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多