Рендеринг имени поля в EditorTemplate (представленный через EditorFor ())

Посмотрите вопрос о 'Взаимном исключении' в C#. И затем взгляд эти два вопросы относительно использования 'блокировки (Объектный)' оператор конкретно.

23
задан IAdapter 27 September 2009 в 06:43
поделиться

2 ответа

Вы должны иметь возможность вытащить желаемый идентификатор из свойства ViewData.TemplateInfo.HtmlFieldPrefix представления. Примерно так:

<%@ Control Language="C#"
      Inherits="System.Web.Mvc.ViewUserControl<System.XML.Linq.XElement>" %>
<textarea id="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>" class="html">
    <%= Model.ToString() %>
</textarea>

Чтобы показать, почему это работает, вот место в TemplateHelpers.cs (исходного кода MVC2 Preview 1), где ViewData инициализируется для элемента управления шаблоном редактора:

ViewDataDictionary viewData = new ViewDataDictionary(html.ViewDataContainer.ViewData) {
    Model = modelValue,
    TemplateInfo = new TemplateInfo {
        FormattedModelValue = formattedModelValue,
        ModelType = modelType,
        HtmlFieldPrefix = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(expression),
        IsNullableValueType = (underlyingNullableType != null),
    }
};

В приведенном выше вызове инициализируется «выражение» ( далее вверх по стеку вызовов) с именем редактируемого свойства.

Кстати, @Sperling ниже уловил деталь, которую я изначально упустил: если вы используете (или можете использовать) нестандартный HtmlHelper.IdAttributeDotReplacement , то вы '

37
ответ дан 29 November 2019 в 02:01
поделиться

Использовали это для генерации идентификатора (с префиксом модели). Пропустите часть .Replace (), если вам нужен атрибут name.

<%=Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(String.Empty).Replace(".", HtmlHelper.IdAttributeDotReplacement) %>
4
ответ дан 29 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: