c# - htmlhelper - layout asp net mvc




Quelle est la différence entre Html.Hidden et Html.HiddenFor (4)

Je peux trouver une bonne définition de Html.HiddenFor sur MSDN, mais la seule chose que je trouve sur Html.Hidden est liée à des problèmes qu’il a rencontrés.

Quelqu'un peut-il me donner une bonne définition et un exemple?


Chaque méthode de la classe HtmlHelper a un jumeau avec le suffixe For . Html.Hidden prend une chaîne en tant qu'argument que vous devez fournir, mais Html.HiddenFor accepte une expression indiquant que si vous affichez une vue fortement typée, vous pouvez en tirer parti et nourrir cette méthode avec une expression lambda comme celle-ci.

o=>o.SomeProperty 

au lieu de "SomeProperty" dans le cas de l’utilisation de la méthode Html.Hidden .


Html.Hidden ('name', 'value') crée une balise masquée avec name = 'name' et value = 'value'.

Html.HiddenFor (x => x.nameProp) crée une balise masquée avec un nom = 'nameProp' et une valeur = x.nameProp.

À première vue, ils semblent faire la même chose, l'un juste plus pratique que l'autre. Mais sa valeur réelle est pour la liaison de modèle. Lorsque MVC essaie d'associer le code HTML au modèle, il doit avoir le nom de la propriété. Pour Html.Hidden, nous avons choisi "nom" et non "nomProp". Par conséquent, la liaison ne fonctionnerait pas. Vous devez avoir un objet de liaison personnalisé ou obtenir les valeurs des données du formulaire. Si vous réaffichez la page, vous devez redéfinir les valeurs du modèle.

Vous pouvez donc utiliser Html.Hidden, mais si vous vous trompez de nom ou si vous modifiez le nom de la propriété dans le modèle, la liaison automatique échouera lorsque vous envoyez le formulaire. Mais en utilisant une expression de type vérifié, vous obtiendrez du code et, lorsque vous modifierez le nom de la propriété, vous obtiendrez une erreur lors de la compilation. Et puis vous êtes assuré d'avoir le nom correct dans le formulaire.

Une des meilleures fonctionnalités de MVC.


La plupart des méthodes d'assistance MVC ont une variante XXXFor. Ils sont destinés à être utilisés avec une classe de modèle concrète. L'idée est de permettre à l'assistant de dériver l'attribut "name" approprié pour le contrôle de saisie de formulaire en fonction de la propriété spécifiée dans le lambda. Cela signifie que vous devez éliminer les "chaînes magiques" que vous auriez sinon dû utiliser pour corréler les propriétés du modèle avec vos vues. Par exemple:

Html.Hidden("Name", "Value")

Aura pour résultat:

<input id="Name" name="Name" type="hidden" value="Value">

Dans votre contrôleur, vous pourriez avoir une action comme:

[HttpPost]
public ActionResult MyAction(MyModel model) 
{
}

Et un modèle comme:

public class MyModel 
{
    public string Name { get; set; }
}

Le Html.Hidden brut Html.Hidden nous avons utilisé ci-dessus sera corrélé à la propriété Name du modèle. Cependant, il est désagréable que la valeur "Nom" de la propriété doive être spécifiée à l'aide d'une chaîne ("Nom"). Si vous renommez la propriété Name sur le modèle, votre code va casser et l'erreur sera un peu difficile à comprendre. Par contre, si vous utilisez HiddenFor , vous êtes protégé contre cela:

Html.HiddenFor(x => x.Name, "Value");

Désormais, si vous renommez la propriété Name , vous obtiendrez une erreur d'exécution explicite indiquant que la propriété est introuvable. En outre, l'analyse statique présente d'autres avantages, tels que la liste déroulante des membres après la saisie de x. .


Le Html.Hidden crée une entrée cachée Mais vous devez spécifier le nom et tous les attributs que vous voulez attribuer à ce champ et à la valeur, tandis que le Html.HiddenFor crée une entrée cachée pour l'objet que vous lui transmettez. ressemble à ca:

Html.Hidden("yourProperty",model.yourProperty);

Html.HiddenFor(m => m.yourProperty)

Dans ce cas, le résultat est le même!





html-helper