Как получить имя поля модели в шаблоне редактора - PullRequest
20 голосов
/ 07 июля 2011

Я создаю свой первый пользовательский шаблон редактора для элемента управления текстовой области. Мой код до сих пор -

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%= Html.TextAreaFor( Model => Model , 2, 30, 
     new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %>

Пока не так много, но это работает. Но нам нужно добавить поле счетчика символов, чтобы показать оставшееся количество символов, которое может ввести пользователь. Я знаю, как сделать весь JavaScript, чтобы эта работа работала.

Таким образом, чтобы система имен оставалась неизменной, я собираюсь добавить элемент управления с именем ".charCounter" для отображения количества оставшихся символов. Моя проблема в том, что я не могу определить правильный синтаксис, чтобы можно было получить имя поля для модели.

Финальная версия будет выглядеть примерно так (JavaScript опущен) -

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%= Html.TextAreaFor( Model => Model , 2, 30, 
     new { @class = "html", @placeholder = ViewData.ModelMetadata.Watermark }) %>
<span class="xxx">Remaining characters - 
     <input readonly type="text" name="<fieldName>.charCounter" />
</span>

Ответы [ 4 ]

30 голосов
/ 07 июля 2011

Вы можете использовать ViewData.TemplateInfo.HtmlFieldPrefix, например:

<input 
    readonly="readonly" 
    type="text" 
    name="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>.charCounter" 
/>
16 голосов
/ 14 ноября 2012

Я столкнулся с проблемой, когда PropertyName не возвращал префикс модели, например Contact.FirstName. Я смог вернуть HTML-идентификатор поля, используя это:

@ViewData.TemplateInfo.GetFullHtmlFieldId("")

Возвращает: Contact_FirstName

Соответственно, вы можете вернуть имя поля, используя:

@ViewData.TemplateInfo.GetFullHtmlFieldName("")

Возвращает:

Contact.FirstName

3 голосов
/ 26 октября 2012

ViewData.ModelMetadata.PropertyName прекрасно работает в MVC3.

В бритве:

<input readonly="readonly" type="text" name="@ViewData.ModelMetadata.PropertyName">
1 голос
/ 09 февраля 2018

Получение только названия модели / идентификатора (например, Дата рождения ):

ViewData.ModelMetadata.PropertyName;

Получение имени модели с префиксами для сложных объектов (например, Identity.Person.BirthDate ):

@Html.NameFor(m => Model);

или

ViewData.TemplateInfo.HtmlFieldPrefix;

Получение идентификатора модели с префиксами для сложных объектов (например, Identity_Person_BirthDate ):

@Html.IdFor(m => Model)

или

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