我正在查看ASP.NET MVC的新版本(如果您还没有看到它,请参阅此处了解更多详细信息)并且我在显示对象内容时遇到了一些非常基本的问题。
在我的控制中,我有一个Person
类型的对象,我将其传递给ViewData.Model
中的视图。到目前为止一切都很好,我可以在视图中提取准备显示的对象。我没有得到的是,我需要调用Html.DisplayFor()
方法来获取数据到屏幕。我试过以下......
<%
MVC2test.Models.Person p = ViewData.Model as MVC2test.Models.Person;
%>
// snip
<%= Html.DisplayFor(p => p) %>
但我收到以下消息:
CS0136:无法在此范围内声明名为“p”的局部变量,因为它会为“p”赋予不同的含义,“p”已在“父级或当前”范围中用于表示其他内容
我知道这不是我应该做的 - 我知道重新定义变量会产生这个错误,但我不知道如何从控制器访问该对象。所以我的问题是,如何将对象传递给视图以显示其属性?
N.B。我应该补充说,我正在有限的业余时间阅读这篇文章,所以我完全有可能错过一些基本的东西。
TIA
答案 0 :(得分:6)
Html.DisplayFor
只有在您的View是强类型时才能使用,并且它适用于传递给View的对象。
因此,对于您的情况,您必须使用Person类型作为其模型类型声明您的View(例如something.something.View<Person>
)(抱歉,我不记得确切的名称,但这应该有意义),然后在调用Html.DisplayFor(p => p)
时,p
会将传递的模型(Person)值的值带入视图。
希望这是有道理的。
答案 1 :(得分:1)
p已经是一个变量名;和变量名在整个当前范围内必须是唯一的。因此,displayFor(p =&gt; p)无效,因为您在那里声明了一个新变量'p'。这样编译器就不会知道使用你的Person p或(p =&gt;)变量了。
所以只需将其重命名为
<%= Html.DisplayFor(person => person) %>