ASP.NET MVC 3: переопределить атрибут «имя» с TextBoxFor - PullRequest
88 голосов
/ 19 мая 2011

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

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

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

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

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

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

Ответы [ 11 ]

213 голосов
/ 14 июля 2013

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

@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })
40 голосов
/ 19 мая 2011

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

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

13 голосов
/ 18 мая 2015

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

 @Html.EditorFor(expression, null, name)
8 голосов
/ 19 мая 2011

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

 @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")
7 голосов
/ 19 февраля 2012

ответ бена дал мне то, что я искал, за исключением того, что вам нужно завернуть в Html.Raw

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))
3 голосов
/ 18 ноября 2017

Это звонок Microsoft GOTCHA

Используйте имя заглавными буквами, как это

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})
3 голосов
/ 19 мая 2011

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

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")
1 голос
/ 07 января 2018
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })

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

1 голос
/ 29 ноября 2016

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

@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })
0 голосов
/ 14 июня 2019

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

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

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