EditorFor如何在表单元素上设置ID和Name html属性
我有几层嵌套自定义用户控件:
RegisterUser.aspx
<%@ .... Inherit="System.Web.Mvc.ViewPage" ... m.Details) %> ...
UserDetails.ascx
<%@ .... Inherit="System.Web.Mvc.ViewUserControl" ... m.BirthDate) %> ...
我在Shared / EditorTemplates中声明了DateTime.ascx
<%@ .... Inherit="System.Web.Mvc.ViewUserControl" ... ...
问题是如何设置输入id属性? 我知道EditorFor为默认类型提供了一些魔力。 例如,如果DateTime的类型为string,则EditorFor会将输入类型的id设置为“Details_BirthDate”,将name属性设置为“Details.BirthDate”。 我想知道它是如何完成的? 因为我想将它用于我的特殊自定义类型。
您将使用多少级别的编辑器模板? 我真的认为最后一个是多余的,你可以使用:
<%= Html.TextBoxFor(m => m.BirthDate) %>
顺便说一下MVCContrib很棒。 它有类似的东西:
<%: Html.IdFor(x => x.BirthDate) %>
和:
<%: Html.NameFor(x => x.BirthDate) %>
这在某些情况下非常有用。
更新:
始终使用强类型编辑器模板:
<%@ .... Inherit="System.Web.Mvc.ViewUserControl" <%: Html.TextBoxFor(x => x) %>
使用以下两种方法找到解决方案:
<%= Html.ViewData.TemplateInfo.GetFullHtmlFieldId("BirthDate") %> <%= Html.ViewData.TemplateInfo.GetFullHtmlFieldName("BirthDate") %>
我想你正在寻找ViewData.TemplateInfo.HtmlFieldPrefix。 例:
如果需要指定字段,可以使用GetFullHtmlFieldId,但如果在显示或编辑模板中使用它,则可以使用HtmlFieldPrefix。
更多信息在这个SO问题: 在EditorTemplate中渲染字段名称(通过EditorFor()呈现)