Est-il possible lors de l'utilisation Html.TextBoxFor
de remplacer l'attribut de nom?
J'ai essayé sans succès. Je dois utiliser TextBoxFor pour que la validation côté client fonctionne, mais pour des raisons que je n'entrerai pas, j'ai besoin que le nom de la zone de texte soit 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" })
Ce qui fonctionne pour l'ID mais pas pour le nom. Est-ce possible?
Mise à jour : recherche dans le code de TextBoxFor. Il ne semble pas qu'il existe un moyen facile. J'espère que quelqu'un pourra me prouver le contraire.
c#
asp.net-mvc-3
razor
html-helper
Rob Stevenson-Leggett
la source
la source
Réponses:
Rob, en fait, il existe un moyen beaucoup plus simple. Au lieu du nom , utilisez Nom :
la source
Name
résultats dans deux attributsName
etname
, et le classeur de modèles utilise lename
.Le demandez-vous parce que vous souhaitez appliquer un préfixe au nom? Si tel est le cas, vous pouvez le faire en définissant
ViewData.TemplateInfo.HtmlFieldPrefix
dans votre contrôleur.J'ai beaucoup appris sur ce sujet sur le blog de Brad Wilson .
la source
EditorFor a une surcharge où vous pouvez fournir l'
name
attribut en tant que paramètre:la source
Essayez EditorFor . vous pouvez passer une chaîne comme nom de modèle si vous souhaitez 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
templatename
de rendre explicitement la zone de texte, vous pouvez donc la transmettrenull
. Notez qu'il ne nécessite pas explicitement le paramètre id, il l'inférera du nom de l'élément. Et toutes les choses de validation sont toujours actives avec EditorForla source
La réponse de ben m'a obtenu ce que je cherchais sauf que vous devez l'envelopper en Html.
la source
C'est appeler Microsoft GOTCHA
Utilisez le nom en majuscules, comme ceci
la source
un peu "non joli" =), essayez:
la source
Pour moi, ça marche! J'espère que ça aide!
la source
Je ne sais pas lequel de ces deux paramètres de chaîne au milieu fait le travail, mais cela n'a fonctionné que lorsque j'ai tapé les deux.
la source
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);
. Aucune idée de ce quitemplateName
est censé être, alors je l'ai utilisénull
. CarhtmlFieldName
j'ai utilisé le nom du paramètre (dans mon cas "ipmi" au lieu de "IPMI"). Cela a fait l'affaire pour moi.Pour cet exemple, je désactivais les champs de formulaire en fonction des autorisations, 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.
Résulte en:
la source
Restez simple, vous fournissez déjà l'ID, vous devriez simplement pouvoir utiliser la méthode "TextBox" au lieu de "TextBoxFor" et cela fonctionnera bien côté client et côté serveur. En outre, bien que la réponse acceptée fonctionnera, mais produira des attributs de nom en double sur votre balise si vous l'inspectez à l'aide d'un navigateur. La solution ci-dessous n'a pas ce problème.
MvcHtmlString Html.TextBox (nom de chaîne, valeur de chaîne, objet htmlAttributes)
la source