Это связано с фактическими типами для этих атрибутов в помощниках тегов. Например, атрибут asp-for
поддерживается свойством класса вспомогательного тега, которое имеет тип ModelExpression
. Таким образом, ожидается, что то, что вы передаете атрибуту в представлении, может быть интерпретировано как ModelExpression
, то есть представление указанного c свойства на некотором уровне модели. В других случаях, таких как asp-items
, типом является IEnumerable<SelectListItem>
, поэтому ожидается, что вы передадите значение этого типа.
Проще говоря, синтаксис @Model.Property
является разыменованием : вы извлекаете значение этого свойства, тогда как когда вы просто делаете Property
, вы передаете выражение , представляющее это свойство.
Существует сценарий, который размывает линии немного: когда модель представляет собой список, и вы специально пытаетесь ссылаться на определенный элемент в этом списке как выражение. В этом случае что-то вроде [0].Property
не является допустимым выражением, поэтому вы должны использовать @Model[0].Property
.