Asp.Net MVC - Просмотр -> Создать 2 объекта - PullRequest
1 голос
/ 10 мая 2009

Прежде всего, я действительно новичок в идеологии MVC Asp.Net.

Я хотел бы знать, как я могу создать два объекта (модели) в одном представлении?

потому что, если я смотрю на заголовок представления, он наследуется от одной модели:

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

Итак, если, например, я хочу создать в том же виде (страница Aspx) MyObjectA и объект MyObjectB, каков наилучший способ справиться с этим?

Надеюсь, мне было ясно ...

Ответы [ 2 ]

3 голосов
/ 10 мая 2009

Если под «созданием» вы подразумеваете «передачу» двух объектов из контроллера в представление, вы должны создать новый класс, который будет содержать два объекта, и передать его из контроллера в представление:

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

Тогда определение View будет выглядеть так:

<%@ 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;
3 голосов
/ 10 мая 2009

Если у вас есть объект модели Person, а другой, скажем, Comment, а затем в том же представлении вы хотели бы отобразить сведения о людях и комментарии, добавленные к этому человеку, вы можете захотеть создать промежуточный объект, на который иногда ссылаются как «объект передачи данных» или «объект просмотра». Итак, я создаю простой класс:

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

.. теперь я могу вернуть результат моего действия как PersonDetailDTO вместо Person. Затем представление также строго типизируется до PersonDetailDTO, что облегчает мне доступ к данным PersonDetail и коллекции комментариев.

Например, я использую такой вид объекта для одного из моих частичных видов:

        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)
...