114 votes

ASP.NET MVC 3: remplacement de l'attribut "name" avec TextBoxFor

Est-il possible lors de l'utilisation d' Html.TextBoxFor à remplacer le nom de l'attribut?

J'ai essayé, sans succès. J'ai besoin d'utiliser TextBoxFor pour obtenir la validation côté client pour le travail, mais pour des raisons que je ne vais pas entrer dans j'ai besoin du nom de la zone de texte pour être différente de la créée.

J'ai essayé ce qui suit:

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

Qui travaille pour des ID mais pas de nom. Est-ce possible?

Mise à jour: Regarder dans le code pour TextBoxFor. Il n'a pas l'air comme il est un moyen facile. J'espère que quelqu'un peut me prouver le contraire.

257voto

Anar Khalilov Points 1922

Rob, en réalité, il existe un moyen beaucoup plus simple. Au lieu de name , utilisez Name :

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

44voto

James McCormack Points 4828

Souhaitez-vous appliquer un préfixe? Pour cela, vous pouvez définir ViewData.TemplateInfo.HtmlFieldPrefix dans votre contrôleur.

J'ai beaucoup appris sur ce sujet sur le blog de Brad Wilson .

8voto

archil Points 21369

Essayez EditorFor. vous pouvez passer la chaîne, comme le nom du modèle si vous voulez assurez-vous de zone de texte est rendu, même si la propriété n'est pas de type chaîne de caractères. Si la propriété est la chaîne de caractères déjà, il n'a pas besoin d' templatename explicitement à rendre une zone de texte, de sorte que vous pouvez passer null. Notez qu'il ne nécessite pas de paramètre id explicitement, il va déduire de nom de l'élément. Et tous la validation de choses sont encore actif avec EditorFor

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

7voto

Rip Ryness Points 124

La réponse de ben m'a donné ce que je cherchais sauf que vous devez vous envelopper en Html.Raw

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

4voto

benwasd Points 995

un peu "unsde" =), essayez:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X