web-dev-qa-db-fra.com

Quelle est une explication simple pour displayfor et displaynamefor dans asp.net?

J'ai un cours

public class Item
{
    public int ItemId { get; set; }

    [Required(ErrorMessage = "Category is required")]
    [Range(1, int.MaxValue, ErrorMessage = "Category is required")]
    public int CategoryId { get; set; }

    [Display(Name = "Current password")]
    [Required(ErrorMessage = "Name is required")]
    [StringLength(160)]
    public string Name { get; set; }

    [Required(ErrorMessage = "Price is required")]
    [Range(0.01, 100.00,
        ErrorMessage = "Price must be between 0.01 and 100.00")]
    public decimal Price { get; set; }

    public virtual Category Category { get; set; }
}

Dans mon contrôleur, je passe une instance de ceci pour voir

public ActionResult Index()
    {
        var model = new Item
        {
            CategoryId = 1,
            Name = "aaa",
            Price = 2
        };

        return View("Index", model);            
    }

puis en vue j'essaie d'afficher le nom en utilisant

@model GenericShop.Models.Item

<p>                               
 @Html.DisplayNameFor(m => m.Name)                                       
</p>

et obtenez l'erreur suivante

Message d'erreur du compilateur: CS1061: 'System.Web.Mvc.HtmlHelper' ne contient pas de définition pour 'DisplayNameFor' et aucune méthode d'extension 'DisplayNameFor' acceptant un premier argument de type 'System.Web.Mvc.HtmlHelper' n'a pu être trouvée ( manque-t-il une directive using ou une référence d'assembly?)

@Html.DisplayFor(m => m.Name) fonctionne bien, mais je ne vois pas pourquoi

@Html.DisplayNameFor(m => m.Name) ne fonctionne pas.

DisplayFor affiche la valeur de l'élément de modèle et DisplayNameFor affiche simplement le nom de la propriété?

11
Minsk

Presque là. :)

DisplayNameFor affiche le nom de la propriété ou la chaîne définie dans l'attribut d'affichage de la propriété.

public class Item
{
    public int ItemId { get; set; }

    [Display(Name = "Current name")]
    [Required(ErrorMessage = "Name is required")]
    [StringLength(160)]
    public string Name { get; set; }

    [Required(ErrorMessage = "Price is required")]
    [Range(0.01, 100.00,
        ErrorMessage = "Price must be between 0.01 and 100.00")]
    public decimal Price { get; set; }

}

Ensuite, @Html.DisplayNameFor(m => m.Name) afficherait 'Nom actuel'.

@Html.DisplayNameFor(m => m.Price) afficherait simplement Price.

Notez que vous pouvez également localiser l'attribut d'affichage comme ceci:

[Display(ResourceType = typeof(MyResources), Name = "Name")]
public string Name{ get; set; }

Qui à son tour se penchera dans le fichier resc MyResources. (Si la configuration est effectuée correctement).

Le Html.DisplayFor affiche la valeur du champ.

23
RoteS