1

首先,我对 MVC Asp.Net 意识形态真的很陌生。

我想知道如何在一个视图中创建两个对象(模型)?

因为如果我查看视图标题,它是从一个模型继承的:

\<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

因此,例如,如果我想在同一个视图(Aspx 页面)中创建一个 MyObjectA 和一个对象 MyObjectB,那么最好的处理方法是什么?

我希望我已经清楚了...

4

2 回答 2

3

如果你有一个模型对象Person,另一个让我们说Comment,然后在同一个视图中你想显示一个人的详细信息和添加到那个人的评论,你可能想要创建一个中间对象,有时称为“数据传输对象”或“查看对象'。所以,我创建了一个简单的类:

public class PersonDetailDTO
{
    public Person PersonDetail {get; set;}
    public IList<Comment> Comments {get; set;}
}

..现在我可以将我的操作结果作为类型PersonDetailDTO而不是说返回Person。然后视图也被强类型化PersonDetailDTO,使我可以轻松访问 PersonDetail 数据和 Comments 集合。

例如,我将这样的视图对象用于我的部分视图之一:

        public class AnnouncementsPartialViewData
        {
            public IList<Announcement> Announcements { get; set; }
            public object MonthlyPlannerRouteVals { get; set; }
            public object PreSchoolRouteVals { get; set; }
            public object ElementaryRouteVals { get; set; }
        }

.. 部分视图标题如下所示:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<KsisOnline.Web.Controllers.HomeController.IndexViewData.AnnouncementsPartialViewData>" %>

..所以我可以轻松地从视图中的该视图类访问键入的数据,如下所示:

<% if (Model.Announcements.Count == 0)
于 2009-05-10T18:41:54.010 回答
3

如果“创建”是指将两个对象从控制器“传递”到视图,则应该创建一个包含这两个对象的新类,并将其从控制器传递到视图:

public class MyModel
{
  public MyObjectA ObjectA { get; set; }
  public MyObjectB ObjectB { get; set; }
}

视图定义将如下所示:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyModel>" %>

在控制器中,您将创建像

...(in controller action)
return new MyModel { ObjectA = new MyObjectA(), ObjectB = new MyObjectB() };

从视图中,您将访问对象,例如

var myObjectA = Model.ObjectA;
于 2009-05-10T18:44:50.027 回答