我从各种其他相关问题here和here中了解到,您无法将匿名类型的对象从控制器传递到视图,因为匿名类型是使用内部访问器定义的。 View和Controller代码被编译到不同的程序集中,因此尝试使用它会导致此错误......
对象不包含'foo'
的定义
这很好,我可以接受,虽然起初很烦人。有足够的建议解决方法来安抚我。
但是,我认为您仍然可以将匿名类型从视图传递到局部视图,因为它们都是视图,它们将在同一个程序集中编译。
Razor查看代码......
@Html.Partial("Partial1", new { foo = "Something", bar = "Something else" })
和“Partial1”的部分视图代码
@model dynamic
<h1>@Model.foo</h1>
<span>@Model.bar</span>
奇怪的是,这个WAS在一个新的MVC项目的开发开始工作,但是当我添加了更多的视图时它就停止了工作,现在给我的错误与上面提到的相同。
就好像我已达到一个阈值,在该阈值中视图和局部视图不再编译到同一个程序集中。但我只是在猜测。
我想知道是否有人可以解释这一点。
答案 0 :(得分:12)
不知道它停止工作的原因,但这是解决方法。
使用@ViewData.Eval("foo")
代替@Model.foo
并删除您的@model动态线。没有必要。
答案 1 :(得分:2)
我永远无法解释为什么这样做然后停止了,所以只需要使用命名类型定义。不是世界末日,而是令人失望。这种东西非常适合使用动态类型。
答案 2 :(得分:2)
有关详细信息,请在此处查看问题和答案:
MVC Razor dynamic model, 'object' does not contain definition for 'PropertyName'
基本上,它停止工作的最可能原因是因为你在同一文件夹中有另一个视图,其模型类型不可解析。
使用损坏的模型类型更正违规视图,清理并重建解决方案,它应该再次起作用。
答案 3 :(得分:0)
在ASP.NET Core中,您可以使用局部视图标签帮助程序调用局部视图:
<partial name="MyPartialView" model='new { SomeProperty = "some value" }' />
然后,在部分视图中,只需省略@Model指令,瞧,您的Model
就会显示出来。因此,在部分视图中,您可以执行以下操作:
@{ var someProperty = Model.SomeProperty; }