Asp.net mvc 在MVC2.0视图中访问viewmodel数据

Asp.net mvc 在MVC2.0视图中访问viewmodel数据,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我正在开发我的第一个ASP.NET MVC 2.0应用程序,并意识到我仍然对管理视图的最佳方式感到困惑 为了进行调试,我想快速地将多个模型类中的数据转储到一个视图中。我创建了一个viewmodel类,该类将数据组合到单个对象中 public class DBViewModel { public IQueryable<ClassAModel> class_a_list{ get; private set; } public IQueryable&

我正在开发我的第一个ASP.NET MVC 2.0应用程序,并意识到我仍然对管理视图的最佳方式感到困惑

为了进行调试,我想快速地将多个模型类中的数据转储到一个视图中。我创建了一个viewmodel类,该类将数据组合到单个对象中

   public class DBViewModel {

        public IQueryable<ClassAModel> class_a_list{ get; private set; }
        public IQueryable<ClassBModel> class_b_list { get; private set; }

        public DBViewModel(IRepository rep) {
            class_a_list = rep.FindAllClassA();
            class_b_list = rep.FindAllClassB();
        }
    }
现在的问题是如何设置视图。我可以迭代每个模型类的对象,但我非常希望避免手动列出每个类的所有列。毕竟,我还在充实我的模型的早期阶段,我预计模式会经常改变。如果视图能够以编程的方式处理这些模式更改,那就太好了。据我所知,视图模板应该能够做到这一点

基本上,我要寻找的是与这个不起作用的代码片段大致相同的东西:

<% foreach (var a in Model.class_a_list) { %>
   <p><%= Html.DisplayForModel(user) %></p>      
<% } %>

<% foreach (var b in Model.class_b_list) { %>
   <p><%: b.ToString() %></p>      
<% } %>
那么,视图应该如何正确调用模型数据呢


谢谢

查看aspx文件的顶部。您应该看到这样一条线:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
将其更改为:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewPage<MyNamespace.OtherNamespace.DBViewModel>" %>
显然,替换正确的名称空间


现在,下面的代码应该可以正常工作了。

我确实按照您的建议继承了DBViewModel。很抱歉在我截短的示例中漏掉了这一行。但是,Html.DisplayForModel不会生成任何输出。在某种程度上,这并不奇怪,因为我的模型是一个引用了其他模型类的组合类。我真正想要的是Html.DisplayForModel。不幸的是,DisplayForModel似乎没有提供指定要显示哪个模型/对象的功能。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewPage<MyNamespace.OtherNamespace.DBViewModel>" %>