ASP.NET MVC 3: remplacez l’atsortingbut «name» par TextBoxFor

Est-il possible d’utiliser Html.TextBoxFor pour remplacer l’atsortingbut name?

J’ai essayé sans succès. Je dois utiliser TextBoxFor pour que la validation côté client fonctionne, mais pour des raisons que je ne vais pas aborder, le nom de la zone de texte doit être différent de celui généré.

J’ai essayé ce qui suit:

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

Qui fonctionne pour l’identification mais pas le nom. Est-ce possible?

Mise à jour : Recherche dans le code de TextBoxFor. Il ne semble pas y avoir de solution facile. J’espère que quelqu’un peut me prouver le contraire.

Rob, en fait, il y a un moyen beaucoup plus simple. Au lieu de nom , utilisez Nom :

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

Est-ce que vous demandez cela parce que vous voulez appliquer un préfixe au nom? Si c’est le cas, vous pouvez le faire en définissant ViewData.TemplateInfo.HtmlFieldPrefix dans votre contrôleur.

J’ai appris beaucoup de choses sur le blog de Brad Wilson .

EditorFor a une surcharge où vous pouvez fournir l’atsortingbut name tant que paramètre:

  @Html.EditorFor(expression, null, name) 

Essayez EditorFor . vous pouvez passer la chaîne en tant que nom de modèle si vous voulez vous assurer que la zone de texte est rendue même si le type de propriété n’est pas une chaîne. Si la propriété est déjà une chaîne, elle n’a pas besoin de templatename explicitement templatename pour rendre la zone de texte, vous pouvez donc passer la valeur null . Notez qu’il ne nécessite pas explicitement le paramètre id, il le déduira du nom de l’élément. Et tous les éléments de validation sont toujours actifs avec EditorFor

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

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

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

un peu “uncetty” =), essayez:

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

Il s’appelle Microsoft GOTCHA

Utilisez le nom en majuscules, comme ceci

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

Pour moi, ça marche! J’espère que ça aide!

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

Je ne sais pas lequel de ces deux parameters de chaîne au milieu fait le travail, mais cela n’a fonctionné que lorsque j’ai tapé les deux.

Pour cet exemple, je désactivais les champs de formulaire en fonction des permissions, mais je les montrais toujours. J’avais un champ caché pour envoyer la valeur au contrôleur, mais je voulais un nom de champ différent dans EditorFor. Le premier paramètre après la valeur du modèle représente la propriété “name”, le second est le nouveau nom.

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

Résulte en: