Подтвердить что ты не робот

В чем разница между @Html.ValueFor(x => x.PropertyName) и @Model.PropertyName

@Html.ValueFor(x=>x.PropertyName) 
@Model.PropertyName

Кажется, что эти две команды Razor выполняют ту же самую вещь. Есть ли особые обстоятельства или выгоды от использования одного над другим?

4b9b3361

Ответ 1

ValueFor будет вызывать шаблон, который существует для отображения типа, который имеет свойство. По умолчанию этот шаблон может быть таким же простым, как ToString(), но вы можете определить что-либо как шаблон.

@Model.PropertyName будет просто представлять значение как строку.

Ответ 2

@Html.ValueFor(x => x.PropertyName) много раз вызывает код и отражение под капотом.
Это позволит вам настроить способ представления ценности, а затем иметь согласованный формат по всему сайту. Например, если ваше свойство украшено DisplayFormatAttribute.

@Model.PropertyName буквально получает значение свойства напрямую, вызывая ToString() на нем, а HTML избегает результата. Никакого другого форматирования не будет.

 

Чтобы проиллюстрировать это, вы можете увидеть это:

[DisplayFormat(DataFormatString="{0:C}")]
public decimal PropertyName = 1234.56;

@Html.ValueFor(x => x.PropertyName)  =>  "£1,234.56"
@Model.PropertyName                  =>  "1234.56"