我正在重构一个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
属性,但不能从代码中访问它们? 编辑
除
object
外,无法将匿名类型强制转换为任何界面或类型。
答案 0 :(得分:0)
评论中的见解(谢谢)暗示我有2个选项,因为(作为链接问题的答案指出),
匿名类型是内部的,因此在定义程序集之外无法看到它们的属性。
因此Razor绑定引擎无法访问。
使用@Html.DisplayFor("amount")
处理没有智能感知,参考查找等问题。
创建实现公共接口的类,并将部分视图绑定到该接口。