代码之家  ›  专栏  ›  技术社区  ›  ZombieSheep

ASP.NET MVC 2 Displayfor()。

  •  2
  • ZombieSheep  · 技术社区  · 15 年前

    我正在查看新版本的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”已在“parent”或“current”作用域中用于表示其他内容。

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

    注意:我应该补充一点,我在有限的空闲时间里读到了这篇文章,所以我完全有可能错过了一些基本的东西。

    蒂亚

    2 回复  |  直到 11 年前
        1
  •  6
  •   bdukes Jon Skeet    14 年前

    Html.DisplayFor 仅当视图是强类型的,并且它在传递给视图的对象上工作时才能使用。

    因此,对于您的情况,您必须使用类型person作为其模型类型(例如, something.something.View<Person> )(对不起,我不记得确切的名字,但这应该是有意义的),然后打电话时 Html.DisplayFor(p => p) ,请 p 会将传递的模型(人员)值的值带入视图。

    希望这是合理的。

        2
  •  1
  •   Jan Jongboom    15 年前

    p已经是一个变量名;变量名在当前范围内必须是唯一的。因此,displayfor(p=>p)无效,因为您要在其中声明一个新变量“p”。这样,编译器就不知道是否要使用您的person p或(p=>)变量。

    所以只需将其重命名为

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