在模型绑定之后,模型嵌套类型为null

Kev*_*n.A 3 asp.net-mvc model-binding asp.net-mvc-4

我有一个ViewModel如下:

public class CheckoutViewModel
{
    public string ProductNumber { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
    public Input UserInput;

    public class Input
    {
        public string Email { get; set; }
        public string Phone { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的动作:

[HttpPost]
public ActionResult Index(CheckoutViewModel model)
{
    // ...
    return View();
}
Run Code Online (Sandbox Code Playgroud)

我的模型如下所示:

@model GameUp.WebUI.ViewModels.CheckoutViewModel

@using (Html.BeginForm("Index", "Checkout", FormMethod.Post))
{
    @Html.AntiForgeryToken()

    <!-- some HTML -->

    @Html.LabelFor(m => m.UserInput.Email)
    @Html.TextBoxFor(m => m.UserInput.Email)

    @Html.LabelFor(model => model.UserInput.Phone)
    @Html.TextBoxFor(model => model.UserInput.Phone)

    <button>Submit</button>
}
Run Code Online (Sandbox Code Playgroud)

当我提交表单时,UserInput为null.我知道ASP.NET MVC能够绑定嵌套类型,但在这段代码中却没有.我也可以通过以下方式获取电子邮件和电话价值:

var email = Request.Form["UserInput.Email"];
var phone = Request.Form["UserInput.Phone"];
Run Code Online (Sandbox Code Playgroud)

也许我做错了什么!这是一个简单的模型绑定,你可以在网络的任何地方找到它.

von*_* v. 9

你忘了把一个二传手放在你的身上UserInput,我不认为这个二传手是自动的.无论如何,你可以通过UserInput在你的控制器方法中添加一个getter/setter来实现它的工作:

public Input UserInput { get; set; }
Run Code Online (Sandbox Code Playgroud)

你的完整型号:

public class CheckoutViewModel
{
    public string ProductNumber { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
    public Input UserInput { get; set; }

    public class Input
    {
        public string Email { get; set; }
        public string Phone { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)