2009-09-23 96 views
2

我正在查看ASP.NET MVC的新版本(如果您还没有看到它,请参阅此处以了解更多详细信息),并且我遇到了一些显示对象的内容。ASP.NET MVC 2 DisplayFor()

在我的控制中,我有一个Person类型的对象,我将它传递给ViewData.Model中的视图。目前为止都很好,我可以在视图中提取对象以供显示。我不明白的是,我需要调用Html.DisplayFor()方法来获取数据。我试过下面...

<% 
    MVC2test.Models.Person p = ViewData.Model as MVC2test.Models.Person; 
%> 
// snip 
<%= Html.DisplayFor(p => p) %> 

,但我得到了以下信息:

CS0136:命名为“P”的局部变量不能在此范围内声明,因为它会给出不同的意思是'p',它已经在'父母或当前'范围内用于表示别的东西

我知道这不是我应该做的 - 我知道重新定义变量会产生这个错误,但我不知道如何从控制器访问对象。所以我的问题是,如何将对象传递给视图以显示其属性?

N.B.我应该补充一点,在有限的空余时间里,我正在阅读这篇文章,所以完全有可能我错过了一些基本的东西。

TIA

回答

6

Html.DisplayFor可以用来只有当你的看法是强类型的,和它的作品传递给视图对象。

因此,对于您的情况,您必须声明您的视图的类型为人作为其模型类型(例如something.something.View<Person>)(对不起,我不记得确切的名称,但这应该是有意义的),然后当调用Html.DisplayFor(p => p),p会将传入的模型(Person)值的值放入视图中。

希望有道理。

+0

谢谢你。当我回到办公室时,我会明天再来一次。 :) – ZombieSheep 2009-09-23 18:06:35

+0

优秀的答案。谢谢,它的工作(但你已经知道,是不是?)) – ZombieSheep 2009-09-24 07:50:02

+0

其实,我没有。好吧,不完全是。 我目前正在学习ASP.NET MVC 1.0的过程,但是我已经阅读了一些关于2.0的文章,并且记得阅读Html.DisplayFor上的一些内容;一些谷歌搜索帮助实际的语法和whatnot :) – AASoft 2009-09-24 21:04:44

1

p已经是变量名;在当前范围内变量名称必须是唯一的。因此,displayFor(p => p)无效,因为您在那里声明了一个新变量'p'。这样编译器不知道使用你的Person p还是(p =>)变量。

所以只是将其重命名为

<%= Html.DisplayFor(person => person) %> 
+1

感谢您的回答,但我真正在做的是如何访问我已经传递到DisplayFor方法中的ViewData.Model视图中的对象。重新宣布为一个新变量并不能实现这一目标。 – ZombieSheep 2009-09-23 15:21:11