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