Возьмите следующие два примера:
@Html.DropDownListFor(
x => x.EquipmentId,
new SelectList(Model.Equipments, "Id", "Text")
)
и
@Html.DropDownList(
"EquipmentId",
new SelectList(Model.Equipments, "Id", "Text")
)
Очевидно, что во втором примере имя свойства, с которым вы связываете выпадающий список, жестко закодировано как магическая строка. Это означает, что если вы решите провести рефакторинг своей модели и переименовать это свойство, поддержка инструментов, которую вы можете использовать, не сможет обнаружить это изменение и автоматически изменить магическую строку, которую вы жестко закодировали в потенциально многих представлениях. Так что вам придется вручную искать и заменять везде, где используется этот слабо типизированный помощник.
В первом примере, с другой стороны, мы используем строго типизированное лямбда-выражение, привязанное к данному свойству модели, поэтому инструменты могут автоматически переименовывать его везде, где оно используется, если вы решите провести рефакторинг своего кода. Также, если вы решите прекомпилировать ваши представления, вы получите ошибку времени компиляции, сразу указав на представление, которое необходимо исправить. Во втором примере вы (в идеале) или пользователи вашего сайта (в худшем случае) получат ошибку времени выполнения при посещении этого конкретного представления.
Помощники со строгой типизацией впервые были представлены в ASP.NET MVC 2, и последний раз, когда я использовал вспомогательный тип со слабой типизацией, давно был в приложении ASP.NET MVC 1.