与ASP.NET中的html帮助器混淆

时间:2017-01-30 11:54:42

标签: c# asp.net html-helper

我有一个视图模型类

public class NewCustomerViewModel
{
   public IEnumerable<MembershipType> MembershipType { get; set; }
   public Customer Customer { get; set; }
}

我有一个带有New()操作方法的Customers控制器:

public ActionResult New()
{
    var membershipTypes = _context.MembershipTypes.ToList();
    var viewModel = new NewCustomerViewModel
    {
        MembershipType = membershipTypes
    };

    return View(viewModel);
}

视图是:

@using (Html.BeginForm("Create", "Customers"))
{ 
    <div class="form-group">
        @Html.LabelFor(e => e.Customer.Name)
        @Html.TextBoxFor(e => e.Customer.Name, new { @class = "form-control" })
    </div>
    <div class="form-group">
        @Html.LabelFor(e => e.Customer.Birthdate)
        @Html.TextBoxFor(e => e.Customer.Birthdate, new { @class = "form-control" })
    </div>
    <div class="checkbox">
        <label>
           @Html.CheckBoxFor(e => e.Customer.IsSubscribedToNewsletter, new { @class = "checkbox" }) Subscribed To Newsletter?
        </label>
    </div>

例如,这是为了什么?

@Html.TextBoxFor(e => e.Customer.Name, ...)

我们目前只有一个空客户实例,我们正在尝试获取名称?

1 个答案:

答案 0 :(得分:1)

我前一段时间this same question

虽然您从未实例化Customer,但是对象已定义,引擎可以为其构建视图。

在回发时,ModelBinder将实例化一个新的Customer,并尝试从表单值中重新填充它。网络是无状态的,因此如果您在构建表单时发送预先填充的Customer对象或空的对象并不重要,在回发时,ASP.NET只能通过什么来构建它。在表格中。