1

我的问题:在我的视图模型中,我创建了一个InterfaceDisplay包含一些显示属性和其他元数据的类,用于设置我的界面条目表单。

我想知道为什么当我使用 additionalViewData 对象设置自定义 id 时,例如。@Html.EditorFor(item => item.Interface.DependantSystem, new { @id = "ls" })我的控件 id 是否仍设置为自动生成id="Interface_DependantSystem"的?

我的视图模型:

public class ApplicationViewModel
{
    //Other Properties

    public class InterfaceDisplay {
        [DisplayName("Linked System")]
        public string DependantSystem { get; set; }

        [DisplayName("Data Flow")]
        public string DataFlow { get; set; }

        [DisplayName("Method")]
        public string Type { get; set; }

        [DisplayName("Name")]
        public string Name { get; set; }

        [DisplayName("Description")]
        [DataType(DataType.MultilineText)]
        public string Description { get; set; }
    }
}

我的观点

@model Namespaces.ApplicationViewModel
<table class="content-table">
        <tr>
            <td style="width: 240px;">
                @Html.Hidden("appid", @Model.Id)

                @Html.LabelFor(item => item.Interface.DependantSystem)
                @Html.EditorFor(item => item.Interface.DependantSystem, new { @id = "ls" })

                @Html.LabelFor(item => item.Interface.DataFlow)
                @Html.EditorFor(item => item.Interface.DataFlow, new { @id = "df" })

                @Html.LabelFor(item => item.Interface.Type)
                @Html.EditorFor(item => item.Interface.Type, new { @id = "mt" })

                @Html.LabelFor(item => item.Interface.Name)
                @Html.EditorFor(item => item.Interface.Name, new { @id = "nm" })

                @Html.LabelFor(item => item.Interface.Description)
                @Html.EditorFor(item => item.Interface.Description, new { @id = "de" })
            </td>
        </tr>
</table>
4

1 回答 1

2

您传递给EditorFor帮助程序的第二个参数是为相应的编辑器模板定义附加视图数据。但是如果你不写自定义的编辑器模板,那么default template就会用到。正如您从我在上一句中链接到的博客文章中看到的那样,这个默认模板对您传递给它的附加视图数据属性参数完全没有任何作用。

因此,如果您希望此参数产生一些效果,您将必须编写一个自定义模板 - 在您的情况下是一个编辑器模板,因为您正在使用 EditorFor 帮助器。由于您将其应用于字符串类型 ( Description) 的属性,因此您可以添加以下自定义编辑器模板~/Views/Shared/EditorTemplates/string.cshtml,其中包含以下内容:

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    ViewData
)

请注意我如何覆盖默认模板并将 ViewData 作为第三个参数传递给 TextBox 帮助器,以便您在视图中创建的匿名对象作为 EditorFor 帮助器的第二个参数最终成为该模板将使用的相应输入字段的 HTML 属性产生。

现在,由于您在使用时覆盖了字符串类型的默认编辑器模板,因此Html.EditorFor(x => x.SomePropertyOfTypeString, new { @class = "foo", id = "bar" })将使用此自定义模板而不是默认模板,它将为您生成以下标记:

<input class="foo" id="bar" name="Description" type="text" value="some value" />
于 2013-01-11T22:02:19.170 回答