通过匿名类型模型MVC 3管窥(Pass anonymous type as model in MV

2019-10-23 06:45发布

我重构一个MVC 3应用程序,并移动了一组类似项目的成局部视图,这样我可以保持该模板DRY。 由于片并不都具有完全相同的特性,我创建匿名类型是这样的:

var model1 = new { Description = "description 1", Message = "message 1" }

并将它们传递给像这样的局部视图:

@Html.Partial("_Partial", model1)

然后,将局部视图试图基于特定属性,即存在使某些块

@if (Model.Description != null) { @Model.Description }

我的问题是,即使我能看到和浏览Model执行期间在监视窗口对象,我得到一个RuntimeBinderExceptionif测试状态'object' does not contain a definition for 'ShowApplied' 。 我可以通过调用获得通过反射值( Model.GetType().GetProperty("ShowApplied").GetValue(Model) ),但宁愿用我的代码示例中显示的格式。 我一直无法找到一个干净的解决方案...

  1. 我怎么能传递一个匿名类型的对象的局部视图,并直接访问它的属性? 我觉得有一些简单的我失踪...
  2. 为什么我能看到的Model ,同时调试特性,而不是从代码访问它们?

编辑

  • 我指定@model动态。
  • 使用的接口需要创建非匿名类型,因为,因为这个答案解释 ,

匿名类型不能被转换为除了任何接口或类型object

Answer 1:

从评论的见解(谢谢)暗示我有2个选择,因为(作为答案的链接的问题指出)

匿名类型是内部的,所以它们的性能不能限定其装配外部看到。

因此无法访问到剃刀绑定引擎。

  1. 使用@Html.DisplayFor("amount")和处理没有智能感知,引用查询等

  2. 创建实现一个共同的接口,并结合我到该接口局部视图类。



文章来源: Pass anonymous type as model in MVC 3 Partial View