我的问题:在我的视图模型中,我创建了一个类InterfaceDisplay
,其中包含一些显示属性和其他元数据,用于设置我的界面输入表单。
我想知道为什么当我使用additionalViewData对象设置自定义ID时,例如。 @Html.EditorFor(item => item.Interface.DependantSystem, new { @id = "ls" })
是我的控件ID仍然设置为自动生成的id="Interface_DependantSystem"
我直接从ViewModel覆盖了属性的id,但是当它们是对象中的属性时没有骰子。
我的视图模型:
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>
答案 0 :(得分: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" />