Bien que j'ai lu la documentation sur Html.HiddenFor, je n'ai pas compris à quoi il sert ...Que fait Html.HiddenFor?
Quelqu'un pourrait expliquer son utilisation et donner un exemple?
Où ces aides devraient-elles figurer dans le code?
Bien que j'ai lu la documentation sur Html.HiddenFor, je n'ai pas compris à quoi il sert ...Que fait Html.HiddenFor?
Quelqu'un pourrait expliquer son utilisation et donner un exemple?
Où ces aides devraient-elles figurer dans le code?
Il crée une entrée masquée sur le formulaire pour le champ (à partir de votre modèle) que vous lui transmettez.
Il est utile pour les champs de votre Model/ViewModel que vous ayez besoin de persister sur la page et que vous ayez repassé lorsqu'un autre appel a été passé, mais ne devrait pas être vu par l'utilisateur.
Tenir compte de la classe ViewModel suivante:
public class ViewModel
{
public string Value { get; set; }
public int Id { get; set; }
}
Maintenant, vous voulez la page d'édition pour stocker l'ID, mais ne l'ont pas être vu:
<% using(Html.BeginForm() { %>
<%= Html.HiddenFor(model.Id) %><br />
<%= Html.TextBoxFor(model.Value) %>
<% } %>
Il en résulte l'équivalent du HTML suivant :
<form name="form1">
<input type="hidden" name="Id">2</input>
<input type="text" name="Value" value="Some Text" />
</form>
Et pour consommer l'entrée d'ID masqué sur votre méthode d'action Modifier:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
Bien que cela soit techniquement vrai, vous ne devriez pas avoir à le faire si le formulaire est fortement typé en un modèle de vue. Vous devriez être capable d'accéder directement au modèle, ce qui supprime le besoin de convertir. – Yetti
@Yetti: Incorrect. Il y a une bonne raison pour que le mécanisme d'échafaudage ajoute le champ ID. Retirez-le de l'un de mes tutoriels et utilisez Fiddler pour voir que ce n'est pas dans le corps du message. – RickAndMSFT
Je ne suis pas sûr de savoir comment le commentaire est incorrect. Si le modèle est la propriété * For() * 'd dans la vue, la méthode du contrôleur doit être fortement typée et renseignée automatiquement par ModelBinder. –
L'utilisation du code Razor @ Html.Hidden ou @ Html.HiddenFor est similaire au code Html suivant
<input type="hidden"/>
Et aussi se référer le lien suivant
Comme beaucoup de fonctions, celui-ci peut être utilisé de différentes manières pour résoudre de nombreux problèmes différents, je pense qu'il s'agit d'un outil supplémentaire dans nos ceintures à outils. Jusqu'ici, la discussion s'est concentrée sur la simple dissimulation d'un ID, mais ce n'est qu'une valeur, pourquoi ne pas l'utiliser pour beaucoup de valeurs! C'est ce que je fais, je l'utilise pour charger les valeurs dans une classe seulement une vue à la fois, parce que html.beginform crée un nouvel objet et si votre objet de modèle pour cette vue avait déjà des valeurs passées, les les valeurs seront perdues sauf si vous fournissez une référence à ces valeurs dans le formulaire de début.
Pour voir une grande motivation pour le html.hiddenfor, je vous recommande de voir Passing data from a View to a Controller in .NET MVC - "@model" not highlighting
Lorsque cette aide devrait aller dans le code? – JPCF
<% = Html.HiddenFor (model.Id)%>
dans son exemple ci-dessus –
Je dirais "vu" par l'utilisateur. Les utilisateurs peuvent "modifier" tout ce qu'ils veulent, caché ou non. –