【问题标题】:confused with html helper in ASP.NET与 ASP.NET 中的 html 助手混淆
【发布时间】:2017-01-30 11:54:42
【问题描述】:

我有一个视图模型类

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

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

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, ...)

我们现在只有一个空的 Customer 实例,我们正在尝试获取名称?

【问题讨论】:

  • 真的不清楚你在问什么。
  • 我不完全理解您的问题,请您尝试完善您所说的内容并明确提出问题。另外,让我们知道您期望发生什么
  • 您可能需要在您的模型中创建一个新的客户对象,目前它为空。
  • “我对 html helper 不是很困惑” ...嗯,很好,对吧?
  • @SimonPrice 抱歉,我已经改写了我的问题

标签: c# asp.net html-helper


【解决方案1】:

我不久前有this same question

尽管您从未实例化Customer,但对象已定义,引擎能够为它构建您的视图。

在回发时,ModelBinder 将实例化一个新的Customer 并尝试从您的表单值填充它。 Web 是无状态的,因此在构建表单时发送预填充的 Customer 对象或空对象都没有关系,在回发时 ASP.NET 只能从表单中的内容构建它。

【讨论】:

  • 那么有两个 Customer 对象?一个空的,一个以表单值作为属性的?只是让一个空的 Customer 对象什么都不做,这对我来说很奇怪?
  • GET 请求中,有一个对象包含一个空的Customer 对象,但仍有关于Customer 的元数据。在回发时,ModelBinder 将实例化 Customer 对象并尝试为您的控制器填充它。
  • html 帮助程序 (@Html.TextBoxFor(e =&gt; e.Customer.Name, ...) 正在获取有关 Customer.Name 对象的元数据,以便为该输入创建标签
猜你喜欢
  • 2015-03-23
  • 2018-11-19
  • 2017-04-09
  • 2015-05-29
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2011-01-19
相关资源
最近更新 更多