ASP.NET MVC 2 DisplayFor()

时间:2009-09-23 15:05:12

标签: c# asp.net-mvc asp.net-mvc-2

我正在查看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

2 个答案:

答案 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) %>