Визуализация метки для поля внутри шаблонов редактора ASP.NET MVC 2 - PullRequest
4 голосов
/ 23 апреля 2010

Я начинаю использовать DataAnnotations в ASP.NET MVC и строго типизированных помощниках шаблонов.

Теперь у меня есть это в моих представлениях (Snippet это мой пользовательский тип, Created это DateTime):

 <tr>
  <td><%= Html.LabelFor(f => Model.Snippet.Created) %>:</td>
  <td><%= Html.EditorFor(f => Model.Snippet.Created)%></td>
 </tr>

Шаблон редактора для DateTime выглядит так:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
 <%=Html.TextBox("", Model.ToString("g"))%>  

Но теперь я хочу поместить в шаблон редактора весь <tr>, поэтому мне бы хотелось, чтобы на мой взгляд было только это:

 <%= Html.EditorFor(f => Model.Snippet.Created)%>

И что-то вроде этого в шаблоне редактора, но я не знаю, как отобразить for для атрибута метки, для моего примера это должно быть Snippet_Created, то же самое, что id \ name для текстового поля, поэтому псевдокод:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
 <tr>
  <td><label for="<What to place here???>"><%=ViewData.ModelMetadata.DisplayName %></label></td>
  <td><%=Html.TextBox("", Model.ToString("g"))%></td>
 </tr>

У Html.TextBox() первый параметр пуст, а id \ name для текстового поля генерируется корректно.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 23 апреля 2010

Я нашел одно решение здесь: Визуализация имени поля в шаблоне EditorTemplate (отображается через EditorFor ())

Но это кажется немного многословным, может быть, его можно обернуть в пользовательский Html Helper:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
<tr>
    <td>
        <label for="
            <%= ViewData.TemplateInfo.HtmlFieldPrefix.Replace(
                    ".", 
                    HtmlHelper.IdAttributeDotReplacement) 
            %>">
            <%= ViewData.ModelMetadata.DisplayName %>:
        </label>
    </td>
    <td>
        <%= Html.TextBox("", Model.ToString("g")) %>
    </td>
</tr>
0 голосов
/ 09 мая 2010

Аналогичный подход с использованием главных страниц: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-5-master-page-templates.html

0 голосов
/ 07 мая 2010

ViewData.ModelMetadata.PropertyName

...