Ответ 1
Роб, на самом деле существует гораздо более простой способ. Вместо name используйте Имя:
@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
Возможно ли при использовании Html.TextBoxFor
переопределить атрибут имени?
Я пробовал без успеха. Мне нужно использовать TextBoxFor, чтобы получить подтверждение на стороне клиента, однако по причинам, по которым я не буду входить, мне нужно, чтобы текстовое поле было отличным от сгенерированного.
Я пробовал следующее:
@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })
Что работает для ID, но не для имени. Возможно ли это?
Обновление: просмотр кода для TextBoxFor. Не похоже, что есть простой способ. Надеюсь, кто-то может доказать, что я не прав.
Роб, на самом деле существует гораздо более простой способ. Вместо name используйте Имя:
@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
Вы спрашиваете об этом, потому что хотите применить префикс к имени? Если это так, вы можете сделать это, установив ViewData.TemplateInfo.HtmlFieldPrefix
в свой контроллер.
Я много узнал об этом материале из блог Брэда Уилсона.
EditorFor имеет перегрузку, где вы можете указать атрибут name
в качестве параметра:
@Html.EditorFor(expression, null, name)
Попробуйте Редактор для. вы можете передать строку в качестве имени шаблона, если хотите убедиться, что текстовое поле отображается, даже если тип свойства не является строкой. Если свойство уже является строкой, ему явно не нужно templatename
отображать текстовое поле, поэтому вы можете передать null
. Обратите внимание, что он явно не требует параметра id, он выведет его из имени элемента. И все действия проверки все еще активны с помощью EditorFor
@Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")
Ответ ben получил меня, что я искал, за исключением того, что вам нужно вложить в Html.Raw
@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))
немного "unpretty" =), попробуйте:
@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
Это вызов Microsoft GOTCHA
Используйте имя в шапках, например
@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})
Для меня это работает! Надеюсь, что поможет!
@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })
Не уверен, какой из этих двух строковых параметров в середине выполняет работу, но он работал только тогда, когда я набрал их оба.
В этом примере я отключал поля формы на основе разрешений, но все равно их отображал. У меня было скрытое поле для отправки значения в контроллер, но мне нужно было другое имя поля в 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" />
Проще говоря, если вы уже предоставили идентификатор, вы просто сможете использовать метод "TextBox" вместо "TextBoxFor", и он будет отлично работать на стороне клиента и на стороне сервера. Кроме того, хотя принятый ответ будет работать, но он произведет дубликаты атрибутов имени в вашем теге, если вы проверите его с помощью браузера. Приведенное ниже решение не имеет этой проблемы.
MvcHtmlString Html.TextBox (имя строки, строковое значение, объект htmlAttributes)
@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }