传递多个模型进行查看

时间:2010-10-27 08:12:46

标签: asp.net-mvc-2

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 个答案:

答案 0 :(得分:9)

我通过制作一个特定于您需要信息的视图的ViewMode来完成此操作。

然后在该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); 
}

答案 1 :(得分:4)

创建包含两个属性的视图模型:

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 :(得分:2)

通常 - 您为每个视图创建视图模型。

在你的情况下,那将是:

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);
}