2016-02-13 2 views
6

У меня есть классЧто такое простое объяснение displayfor и displaynamefor в asp.net?

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; } 
} 

В моем контроллере я передать экземпляр этого для просмотра

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

     return View("Index", model);    
    } 

то в виде я пытаюсь отобразить имя с помощью

@model GenericShop.Models.Item 

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

и получить следующая погрешность

Сообщение об ошибке компилятора: CS1061: «System.Web.Mvc.HtmlHelper» не содержит определение «DisplayNameFor» и метод расширения «DisplayNameFor» принимает первый аргумент типа «System.Web.Mvc.HtmlHelper 'можно найти (вы пропали без вести с помощью директивы или ссылка на сборку?)

@Html.DisplayFor(m => m.Name) работает отлично, но я просто не могу понять, почему

@Html.DisplayNameFor(m => m.Name) нет.

DisplayFor отображает значение для элемента модели, а DisplayNameFor просто отображает название объекта?

ответ

14

Практически там. :)

DisplayNameFor показывает имя свойства или строку, определенную в атрибуте отображения для свойства.

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; } 

} 

Тогда @Html.DisplayNameFor(m => m.Name) будет показывать «Текущее имя».

@Html.DisplayNameFor(m => m.Price) будет просто показывать цену.

Обратите внимание, что вы можете также локализовать атрибут отображения так:

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

Который в свою очередь, будет выглядеть в файле MyResources RESC. (Если настройка выполнена правильно).

Html.DisplayFor показывает значение поля.

+0

В вашем ответе, где вы имели в виду, если бы вы ... В обоих случаях вы используете DisplayNameFor, и это путает. – Minsk

+0

В первый раз я использую @ Html.DisplayNameFor (m => m.Name), который ссылается на восьмую строку в примере кода. Если вы посмотрите на строку 5, вы увидите [display (name = «текущее имя»)], это заставит html отобразить «текущее имя» В @ Html.DisplayNameFor (m => m.Price) Я ссылаюсь на line public decimal Цена {get; задавать; } это свойство не имеет [display ...] над ним, поэтому asp.net mvc отображает только имя свойства (которое является Price) Является ли это более ясным? – RoteS

+1

да, да. Таким образом, 'DisplayNameFor (model => model.Field1)' принимает Дисплей (name = "abcd") и печатает abcd. Если нет отображаемого имени, он вместо этого будет использовать имя свойства. – Minsk

Смежные вопросы