Передайте более одной модели для просмотра - PullRequest
3 голосов
/ 27 октября 2010
public ActionResult Index()
{ 
    var pr = db.products;
    return View(pr); 
}

Во-первых - я хочу передать в просмотр больше данных - что-то вроде:

public ActionResult Index()
{ 
    var pr = db.products;
    var lr = db.linksforproducts(2)
    return View(pr,lr); 
}

Как мне прочитать lr данные в представлении?

Во-вторых- в представлении у меня есть таблица продуктов, и я хочу добавить в таблицу столбец со всеми тегами этих продуктов.Как я могу получить теги для каждого продукта?

Теперь я создаю этот код

public class catnewModel
{

    public IQueryable<category> dl { get; set;   }
    public IQueryable<product> dr { get; set;   }
}

и мой контроллер

public ActionResult Index()
    {

        var pr = db.products;
        var pl = db.categories;

        catnewModel model = new catnewModel();
        model.dr = pr;
        model.dl = pl;

        return View(model);
    }

, на мой взгляд, я пытаюсь перебрать

 <% foreach (var item in Model.dr)  %>

но я получаю сообщение об ошибке

error CS1061: 'System.Collections.Generic.IEnumerable<amief.Models.catnewModel>' does not contain a definition for 'dr' and no extension method 

Ответы [ 3 ]

9 голосов
/ 27 октября 2010

Я сделал это, сделав ViewModel специально для представления, в котором требуется информация.

Затем в этом ViewModel просто есть свойства для размещения других ваших моделей.

public class ViewModel
{
    public List<ProductModel> Products(){get; set;}
    public List<LinksForProductModel> LinksForProducts(){get; set;}
}


public ActionResult Index()
{ 
    var pr = db.products;
    var lr = db.linksforproducts(2)

    ViewModel model = new ViewModel();
    model.Products = pr;
    model.LinksForProducts = lr;


    return View(model); 
}
4 голосов
/ 27 октября 2010

Создание модели представления, содержащей два свойства:

public class MyViewModel
{
    public IEnumerable<Product> Products { get; set; }
    public IEnumerable<LinkProduct> Links { get; set; }
}

А в вашем контроллере:

public ActionResult Index()
{ 
    var model = new MyViewModel
    {
        Products = db.products,
        Links = db.linksforproducts(2)
    };
    return View(model); 
}
2 голосов
/ 27 октября 2010

Обычно - Вы создаете модель вида для вида.

В вашем случае это будет:

public class IndexModel{
  public ProductModel[] Products{get;set;}
  public LinkForProduct[] Links{get;set;}
}

public ActionResult Index(){
  var model=new IndexModel{
    Products=Map(db.products), 
    Links=Map(db.linksforproducts(2)};
  return View(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...