我从其他相关问题中了解到(其中包括这里和这里),你不能将匿名类型对象从控制器传递到视图,因为匿名类型使用了内部访问器。视图和控制器代码编译成不同的程序集,因此尝试使用它会导致以下错误:
对象不包含“foo”的定义
这很好理解,虽然一开始有些恼人。有足够多的建议性解决方法可以满足我的需求。
然而,我认为你仍然可以从视图传递匿名类型到局部视图,因为它们都是视图,所以它们会在同一个程序集中编译。
Razor视图代码...
@Html.Partial("Partial1", new { foo = "Something", bar = "Something else" })
"Partial1"的部分视图代码
@model dynamic
<h1>@Model.foo</h1>
<span>@Model.bar</span>
奇怪的是,在一个新的MVC项目开发的初期,这个功能是正常工作的,但随着我添加更多视图,它突然停止工作,并且现在给我了上述相同的错误。
好像我已经达到了一个阈值,视图和局部视图不再编译为同一程序集。但这只是我的猜测。
我想知道是否有人能够解决这个问题。
@Html.Partial("Partial1", new Dictionary<string, string> {{ "var1", "val1" }, { "var2", "val2" }}
这样的字典对象,然后在局部视图中可以通过@Model["var1"]
来引用它。 - jbyrd