Кажется, что эти две команды Razor выполняют ту же самую вещь. Есть ли особые обстоятельства или выгоды от использования одного над другим?
Ответ 1
ValueFor будет вызывать шаблон, который существует для отображения типа, который имеет свойство. По умолчанию этот шаблон может быть таким же простым, как ToString(), но вы можете определить что-либо как шаблон.
@Model.PropertyName будет просто представлять значение как строку.
Ответ 2
@Html.ValueFor(x => x.PropertyName) много раз вызывает код и отражение под капотом.
Это позволит вам настроить способ представления ценности, а затем иметь согласованный формат по всему сайту.
Например, если ваше свойство украшено DisplayFormatAttribute.
@Model.PropertyName буквально получает значение свойства напрямую, вызывая ToString() на нем, а HTML избегает результата. Никакого другого форматирования не будет.
Чтобы проиллюстрировать это, вы можете увидеть это: