Можно ли при использовании Html.TextBoxFor
переопределить атрибут имени?
Я безуспешно пытался. Мне нужно использовать TextBoxFor, чтобы проверка на стороне клиента работала, однако по причинам, в которые я не буду вдаваться, мне нужно, чтобы имя текстового поля отличалось от сгенерированного.
Я пробовал следующее:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
Что работает для идентификатора, но не для имени. Это возможно?
Обновление : изучение кода TextBoxFor. Не похоже, что есть простой способ. Надеюсь, кто-нибудь докажет, что я ошибаюсь.
c#
asp.net-mvc-3
razor
html-helper
Роб Стивенсон-Леггетт
источник
источник
Ответы:
Роб, на самом деле есть гораздо более простой способ. Вместо имени используйте имя :
источник
Name
результаты предоставляются в виде двух атрибутов,Name
иname
связыватель модели использует расширениеname
.Вы спрашиваете об этом, потому что хотите добавить к имени префикс? Если да, вы можете сделать это, установив
ViewData.TemplateInfo.HtmlFieldPrefix
в своем контроллере.Я много узнал об этом из блога Брэда Уилсона .
источник
EditorFor имеет перегрузку, в которой вы можете указать
name
атрибут в качестве параметра:источник
Попробуйте EditorFor . вы можете передать строку в качестве имени шаблона, если хотите, чтобы текстовое поле отображалось, даже если тип свойства не является строкой. Если свойство уже является строкой, ему не нужно
templatename
явно отображать текстовое поле, поэтому вы можете пройтиnull
. Обратите внимание, что для него явно не требуется параметр id, он будет выводить его из имени элемента. И все функции проверки по-прежнему активны с EditorForисточник
Ответ Бена дал мне то, что я искал, за исключением того, что вам нужно обернуть в Html.Raw
источник
Это называется Microsoft GOTCHA
Используйте имя заглавными буквами, например это
источник
немного "некрасиво" =), попробуйте:
источник
Для меня это работает! Надеюсь, это поможет!
источник
Не уверен, какой из этих двух строковых параметров в середине работает, но это сработало только тогда, когда я ввел их оба.
источник
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);
. Понятия не имею, чтоtemplateName
должно быть, поэтому использовалnull
. Для этогоhtmlFieldName
я использовал имя параметра (в моем случае «ipmi» вместо «IPMI»). Это помогло мне.В этом примере я отключал поля формы на основе разрешений, но все же показывал их. У меня было скрытое поле для отправки значения в контроллер, но мне нужно было другое имя поля в EditorFor. Первый параметр после значения модели представляет свойство «name», второй - новое имя.
Результаты в:
источник
Будьте проще, вы уже предоставляете идентификатор, вы должны просто иметь возможность использовать метод «TextBox» вместо «TextBoxFor», и он будет отлично работать как на стороне клиента, так и на стороне сервера. Кроме того, хотя принятый ответ будет работать, но в вашем теге будут появляться повторяющиеся атрибуты Name, если вы проверите его с помощью браузера. В приведенном ниже решении этой проблемы нет.
MvcHtmlString Html.TextBox (имя строки, значение строки, атрибут htmlAttributes объекта)
источник