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é?
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.