Переопределение поля EditorFor ID внутри вложенного EditorFor - PullRequest
0 голосов
/ 12 февраля 2012

Привет, я пытаюсь явно изменить поля ID и Name и Validate-For в моих выходных данных EditorFor.

У меня есть следующий код:

Html.EditorFor(x => ViewBag.NestedFormDatas)

Приведенный выше префикс всех полей с именем текущей модели.

Мое временное решение заключается в следующем (я знаю, что это далеко от идеала, но оно работает!):

@Html.Raw(Html.EditorFor(x => ViewBag.NestedFormDatas).ToHtmlString().Replace("NestedForm", "DesiredPrefix"))

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Я подозреваю, что вам нужно изменить атрибуты id и name, потому что вы не используете модели представления.Следующее выглядит просто неправильно:

@Html.EditorFor(x => ViewBag.NestedFormDatas)

Если вы правильно используете модели представлений, вам не нужно изменять имена и идентификаторы, потому что шаблон редактора уже сгенерирует правильные значения:

@Html.EditorFor(x => x.NestedFormDatas)

В любом случае, одна возможность - написать собственный шаблон редактора для данного типа.Поэтому, если мы предположим, что NestedFormDatas является строковым типом, вы можете добавить следующий ~/Views/Shared/EditorTemplates/String.cshtml шаблон редактора, чтобы переопределить шаблон по умолчанию и позволить вам указать дополнительные атрибуты:

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    ViewData
)

и затем:

@Html.EditorFor(x => x.NestedFormDatas, new { id = "foo" })

Что касается атрибута name, это не то, что можно переопределить с помощью помощника TextBox.Вам нужно будет написать своего собственного помощника, если вам когда-нибудь понадобится это сделать.Но, как я уже сказал, если вы используете модели представлений, вам никогда не нужно это делать, потому что именно в этом заключается цель моделей представлений: они специально определены для соответствия требованиям данного представления.

Так что избавьтесь от любых следов ViewBag в вашем коде и начните определять модели представления.Вы увидите, насколько веселым и легким станет ASP.NET MVC.

0 голосов
/ 12 февраля 2012

Вы наверняка можете попробовать использовать аргумент htmlAttributes для переопределения свойств html с TextBoxFor:

@Html.TextBoxFor(x=>item.Name,new { id="newId"})

Проблема, с которой я сталкиваюсь при рассмотрении вашего кода, заключается в том, что вы используете словарь данных динамического представления (ViewBag) с методом, предназначенным для свойств объекта известного типа. Я бы настоятельно рекомендовал заменить ViewBag на ViewModel со строго типизированной коллекцией. Это решило бы вашу проблему с именами полей (я только предполагаю, но это единственная вещь, о которой я мог бы подумать как причина для удаления префикса из ваших элементов ввода)

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