Я рефакторинг приложения MVC 3 и переместил набор похожих элементов в частичный вид, чтобы сохранить этот шаблон DRY. Поскольку куски не все имеют одинаковые свойства, я создаю такие анонимные типы, как это:
var model1 = new { Description = "description 1", Message = "message 1" }
и передавая их частичному представлению следующим образом:
@Html.Partial("_Partial", model1)
Затем частичный вид пытается отобразить определенные блоки на основе существования определенного свойства, то есть
@if (Model.Description != null)
{
@Model.Description
}
Моя проблема в том, что, хотя я вижу и просматриваю объект Model
в окне просмотра во время выполнения, я получаю RuntimeBinderException
в тесте if
, который указывает 'object' does not contain a definition for 'ShowApplied'
. Я могу получить значения через отражение, вызвав (Model.GetType().GetProperty("ShowApplied").GetValue(Model)
), но предпочел бы использовать формат, показанный в моем примере кода. Я не смог найти чистое решение...
- Как передать анонимно типизированный объект в частичное представление и напрямую обращаться к его свойствам? Я чувствую, что есть что-то простое, что мне не хватает...
- Почему я могу видеть свойства
Model
во время отладки, но не получить доступ к ним из кода?
EDIT
- Я задаю динамику @model.
- Использование интерфейса требует создания неанонимных типов, потому что, поскольку этот ответ объясняет,
Анонимный тип не может быть добавлен к любому интерфейсу или типу, кроме
object
.