Подтвердить что ты не робот

Как получить имя поля модели в шаблоне пользовательского редактора

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

<%@ 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>
4b9b3361

Ответ 1

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

<input 
    readonly="readonly" 
    type="text" 
    name="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>.charCounter" 
/>

Ответ 2

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

@ViewData.TemplateInfo.GetFullHtmlFieldId("")

Возврат: Contact_FirstName

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

@ViewData.TemplateInfo.GetFullHtmlFieldName("")

Возврат:

Contact.FirstName

Ответ 3

ViewData.ModelMetadata.PropertyName отлично работает в MVC3.

В бритве:

<input readonly="readonly" type="text" name="@ViewData.ModelMetadata.PropertyName">