将匿名对象从视图传递到局部视图

And*_*age 18 asp.net-mvc partial-views anonymous-types razor

我从各种其他相关问题,了解这里,并在这里等等,因为匿名类型与内部访问定义你不能从控制器通过匿名类型对象的视图.View和Controller代码被编译到不同的程序集中,因此尝试使用它会导致此错误...

对象不包含'foo'的定义

这很好,我可以接受,虽然起初很烦人.有足够的建议解决方法来安抚我.

但是,我认为你仍然可以将匿名类型从视图传递到局部视图,因为它们都是视图,它们将在同一个程序集中编译.

Razor查看代码......

@Html.Partial("Partial1", new { foo = "Something", bar = "Something else" })
Run Code Online (Sandbox Code Playgroud)

和"Partial1"的局部视图代码

@model dynamic 

<h1>@Model.foo</h1>
<span>@Model.bar</span>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个WAS在一个新的MVC项目的开发开始工作,但是当我添加了更多的视图时它就停止了工作,现在我给出了与上面提到的相同的错误.

就好像我已达到一个阈值,在该阈值中视图和局部视图不再编译到同一个程序集中.但我只是在猜测.

我想知道是否有人可以解释这一点.

ade*_*l41 12

不知道它停止工作的原因,但这是解决方法.

@ViewData.Eval("foo")而不是@Model.foo

并删除您的@model动态线.没有必要.

  • 尼斯.我已经在这个令人痛苦的主题上读了很多.人们写扩展和各种各样的.这是一个非常简单的解决方案. (2认同)

jos*_*ley 2

有关完整详细信息,请参阅此处的问题和我的回答:

MVC Razor 动态模型,“对象”不包含“PropertyName”的定义

从本质上讲,它停止工作的最可能原因是同一文件夹中有另一个视图,其模型类型不可解析

使用损坏的模型类型纠正有问题的视图,清理并重建解决方案,它应该可以再次工作。