Способ иметь 2 модели в 1 представлении, это возможно? - PullRequest
0 голосов
/ 27 марта 2012

Можно ли поставить 2 модели в один вид? Моя страница работает нормально с одной моделью, однако, когда я пытаюсь добавить другую строку модели ниже, мой код решает начать с рядом ошибок:

@model ProjectShop.Models.Delivery

Мой код, который работает до того, как я добавлю строку выше, показан ниже:

@model ProjectShop.Models.Products

@{
ViewBag.Title = "Products";
Layout = "~/Views/Shared/_ProductLayout.cshtml";
 }

<p>@Html.DisplayFor(model => model.productname) </p>

Каким был бы метод, позволяющий иметь две модели в одном представлении, позволяющий мне вызывать данные из двух источников?

Edit:

Это новый класс, который будет выступать в качестве модели представления для html-страницы, но я предполагаю, что он совсем не прав:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ProjectShop.Models;

namespace ProjectShop.ViewModels
{
public class ProductDelivTimes
{


        public Models.Products;
        public Models.Delivery;

}
}

Edit:

public class ProductDelivTimes
{


    public Models.Products ProductModel;
    public Models.Delivery DeliveryModel;

}

В моем html-файле:

@model IEnumerable<ProjectShop.ViewModels.ProductDelivTimes>

Edit:

@model IEnumerable<ProjectShop.ViewModels.PerformanceTimes>
@{

Layout = "~/Views/Shared/_Layout.cshtml";
var grid = new WebGrid(Model, rowsPerPage: 5, defaultSort: "Name");

ViewBag.Created = TempData["ProductCreated"];
ViewBag.Created = TempData["ProductDeleted"];
}

@grid.GetHtml(
    tableStyle: "grid",
    headerStyle: "gridhead",
    rowStyle: "gridRow",
    alternatingRowStyle: "gridRow",
    mode: WebGridPagerModes.All,
    columns: grid.Columns(

grid.Column("Image", format: @<text><img src="@item.image"  alt=""   width="84px" height="128px"/></text>, style: "Image"),


grid.Column("Products", format: @<text>@Html.Raw(item.Products.name.Substring(0, item.Products.name.IndexOf(".") + 1))</text>, style: "Products")


                    ))

Ответы [ 4 ]

5 голосов
/ 27 марта 2012

Если вы хотите, чтобы в составе представления было несколько сущностей Домена, рассмотрите возможность создания модели представления, которая объединяет две модели источников данных

Что-то вроде (просто псевдокод):

ProductDeliveryViewModel
{
   // ProductModel
   // DeliveryModel
}

Так что у вас будет

@model ProjectShop.Models.ProductDeliveryViewModel

@Html.DisplayFor (model=> model.ProductModel.Property)
@Html.DisplayFor (model=> model.DeliveryModel.Property)
2 голосов
/ 27 марта 2012

Команды, в которых я принимал участие, использовали бы класс ViewModel, чтобы объединить оба бизнес-объекта в один объект, который может использоваться представлением. Это может быть так же просто, как иметь свойство для каждого объекта.

2 голосов
/ 27 марта 2012

Может быть, напишите модель-обертку, которая содержит две модели источников данных и решает, из какой из них получать данные, когда это необходимо?

1 голос
/ 27 марта 2012

В прошлом я достигал этого, используя третью модель «контейнера».

public class MainModel 
{

  public ProductModel productModel {get;set;}
  public DeliveryModel deliveryModel {get;set;}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...