【问题标题】:In a custom editor template, how do I access the field name I should use for the edit control? [duplicate]在自定义编辑器模板中,如何访问应该用于编辑控件的字段名称? [复制]
【发布时间】:2012-03-06 18:46:45
【问题描述】:

可能重复:
How to get model's field name in custom editor template

当为特殊类型的实体输出编辑控件时,例如,让我们说一种颜色或其他东西:

@Html.EditorFor(product => product.Color)

我希望它输出一个下拉列表,所以我尝试创建一个自定义编辑器模板来呈现这样的下拉列表。这是我的模板到目前为止的样子:

@model MyProject.Models.Color
@using (var db = new MyProject.Models.DbContext())
{
    @Html.DropDownList(???,
        new SelectList(db.Colors, "Id", "Name", Model))
}

除了??? — 指定下拉列表的 HTML name 属性的参数,我必须放什么?


(出于显而易见的原因,不仅仅是"Color"。考虑为相同类型的不同字段多次调用相同的编辑模板,例如:

@Html.EditorFor(product => product.InnerColor)
@Html.EditorFor(product => product.OuterColor)

显然,这需要生成具有不同名称的下拉菜单。)

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 editortemplates


    【解决方案1】:

    下拉列表本身已经接收到正确的字段名称。您传递给 name 参数的任何内容都会连接到字段名称上,从而阻止它被识别。

    正确的解决方法是传递空字符串:

    @Html.DropDownList("", new SelectList(...))
    

    【讨论】:

      【解决方案2】:

      this question 的回答建议使用

      ViewData.TemplateInfo.HtmlFieldPrefix
      

      所以完整的代码会是这样的

      @model MyProject.Models.Color
      @using (var db = new MyProject.Models.DbContext())
      {
          @Html.DropDownList(ViewData.TemplateInfo.HtmlFieldPrefix + "_Color",
              new SelectList(db.Colors, "Id", "Name", Model))
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-08
        • 2021-04-15
        • 1970-01-01
        • 2011-02-18
        • 1970-01-01
        相关资源
        最近更新 更多