Как Editor для задания атрибутов идентификатора и имени html для элементов формы - PullRequest
1 голос
/ 24 ноября 2010

У меня есть несколько уровней вложенности пользовательских элементов управления:

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-->
 ...

и я объявил DateTime.ascx в Shared / EditorTemplates

 <%@ .... Inherit="System.Web.Mvc.ViewUserControl<dynamic>"
 ...
 <input type="text" id="???" />
 ...

Вопрос в том, как установить атрибут ввода идентификатора? Я знаю, что EditorFor создает магию для типов по умолчанию. Например, если DateTime имел тип string, EditorFor установит идентификатор типа ввода равным «Details_BirthDate», а атрибут имени - «Details.BirthDate». Я хочу знать, как это делается? Потому что я хочу использовать его для своих специальных пользовательских типов.

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

Нашли решение, используя следующие два метода:

<%= Html.ViewData.TemplateInfo.GetFullHtmlFieldId("BirthDate") %>

<%= Html.ViewData.TemplateInfo.GetFullHtmlFieldName("BirthDate") %>
1 голос
/ 24 ноября 2010

Сколько уровней шаблонов редактора вы собираетесь использовать? Я действительно думаю, что последний избыточен, и вы можете использовать:

<%= Html.TextBoxFor(m => m.BirthDate) %>

Кстати, есть MVCContrib , и это здорово. Он имеет такие вещи, как:

<%: Html.IdFor(x => x.BirthDate) %>

и

<%: Html.NameFor(x => x.BirthDate) %>

, что действительно полезно в некоторых сценариях.


UPDATE:

Всегда используйте строго типизированные шаблоны редактора:

<%@ .... Inherit="System.Web.Mvc.ViewUserControl<DateTime>"
<%: Html.TextBoxFor(x => x) %>
0 голосов
/ 24 ноября 2010

Я думаю, что вы ищете ViewData.TemplateInfo.HtmlFieldPrefix. Пример:

<input type="text" id="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>">

Вы можете использовать GetFullHtmlFieldId, если вам нужно указать поле, но если оно используется в шаблоне отображения или редактора, вы можете просто использовать HtmlFieldPrefix.

Дополнительная информация в этом вопросе SO: Отображение имени поля в шаблоне EditorTemplate (отображается через EditorFor ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...