EditorFor如何在表单元素上设置ID和Name html属性

时间:2010-11-23 21:51:54

标签: c# asp.net-mvc asp.net-mvc-2

我有几层嵌套自定义用户控件:

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”。我想知道它是如何完成的?因为我想将它用于我的特殊自定义类型。

3 个答案:

答案 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())