Итак, чтобы подвести итог тому, что говорят люди, и сделать его более общим. Если ваше мнение заявляет, что оно принимает динамические модели:
@model dynamic
Тогда такие вещи, как методы расширения, не смогут определить типы передаваемых им аргументов. Вот два примера (использование Razor, потому что это круто):
@Html.TextBox("myTextBoxName", Model.MyTextBoxValue)
@Html.DropDownList("myDropDownName", Model.MySelectList))
В этих случаях движок не знает, что такое Model.MyTextBoxValue или Model.MySelectList, поэтому он не может выяснить, какие перегрузки методов расширения компилируются. Таким образом, вы просто помогаете ему в этом с помощью строгой печати:
@Html.TextBox("myTextBoxName", (string)Model.MyTextBoxValue)
@Html.DropDownList("myDropDownName", (SelectList)Model.MySelectList))
Кстати, просто чтобы не дать людям потенциально выдернуть волосы, этот список SelectList должен быть правильно создан с чем-то вроде:
var items = List<SelectListItem>();
...
new SelectList(items, "Value", "Text");