В чем разница между @Html.ValueFor(x => x.PropertyName) и @Model.PropertyName
@Html.ValueFor(x=>x.PropertyName)
@Model.PropertyName
Кажется, что эти две команды Razor выполняют ту же самую вещь. Есть ли особые обстоятельства или выгоды от использования одного над другим?
Ответы
Ответ 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"