ASP.NET MVC 3: переопределить атрибут "name" с помощью TextBoxFor

Возможно ли при использовании Html.TextBoxFor переопределить атрибут имени?

Я пробовал без успеха. Мне нужно использовать TextBoxFor, чтобы получить подтверждение на стороне клиента, однако по причинам, по которым я не буду входить, мне нужно, чтобы текстовое поле было отличным от сгенерированного.

Я пробовал следующее:

@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })

Что работает для ID, но не для имени. Возможно ли это?

Обновление: просмотр кода для TextBoxFor. Не похоже, что есть простой способ. Надеюсь, кто-то может доказать, что я не прав.

Ответ 1

Роб, на самом деле существует гораздо более простой способ. Вместо name используйте Имя:

@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })

Ответ 2

Вы спрашиваете об этом, потому что хотите применить префикс к имени? Если это так, вы можете сделать это, установив ViewData.TemplateInfo.HtmlFieldPrefix в свой контроллер.

Я много узнал об этом материале из блог Брэда Уилсона.

Ответ 3

EditorFor имеет перегрузку, где вы можете указать атрибут name в качестве параметра:

 @Html.EditorFor(expression, null, name)

Ответ 4

Попробуйте Редактор для. вы можете передать строку в качестве имени шаблона, если хотите убедиться, что текстовое поле отображается, даже если тип свойства не является строкой. Если свойство уже является строкой, ему явно не нужно templatename отображать текстовое поле, поэтому вы можете передать null. Обратите внимание, что он явно не требует параметра id, он выведет его из имени элемента. И все действия проверки все еще активны с помощью EditorFor

 @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")

Ответ 5

Ответ ben получил меня, что я искал, за исключением того, что вам нужно вложить в Html.Raw

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))

Ответ 6

немного "unpretty" =), попробуйте:

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")

Ответ 7

Это вызов Microsoft GOTCHA

Используйте имя в шапках, например

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})

Ответ 8

Для меня это работает! Надеюсь, что поможет!

@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })

Ответ 9

@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })

Не уверен, какой из этих двух строковых параметров в середине выполняет работу, но он работал только тогда, когда я набрал их оба.

Ответ 10

В этом примере я отключал поля формы на основе разрешений, но все равно их отображал. У меня было скрытое поле для отправки значения в контроллер, но мне нужно было другое имя поля в EditorFor. Первый параметр после значения модели представляет свойство "name", второй - новое имя.

@Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} });

Результаты в:

<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" /> 

Ответ 11

Проще говоря, если вы уже предоставили идентификатор, вы просто сможете использовать метод "TextBox" вместо "TextBoxFor", и он будет отлично работать на стороне клиента и на стороне сервера. Кроме того, хотя принятый ответ будет работать, но он произведет дубликаты атрибутов имени в вашем теге, если вы проверите его с помощью браузера. Приведенное ниже решение не имеет этой проблемы.

MvcHtmlString Html.TextBox (имя строки, строковое значение, объект htmlAttributes)

@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }