Asp.net mvc 2 将多个模型传递给视图

Asp.net mvc 2 将多个模型传递给视图,asp.net-mvc-2,Asp.net Mvc 2,首先-我想向视图传递更多数据-类似于: public ActionResult Index() { var pr = db.products; return View(pr); } 如何读取视图中的lr数据 其次,在视图中,我有一个产品表,我想在表中添加一列,其中包含该产品的所有标签。如何获得每个产品的标签 现在我创建这个代码 public ActionResult Index() { var pr = db.products; var lr = db.l

首先-我想向视图传递更多数据-类似于:

public ActionResult Index()
{ 
    var pr = db.products;
    return View(pr); 
}
如何读取视图中的
lr
数据

其次,在视图中,我有一个产品表,我想在表中添加一列,其中包含该产品的所有标签。如何获得每个产品的标签

现在我创建这个代码

public ActionResult Index()
{ 
    var pr = db.products;
    var lr = db.linksforproducts(2)
    return View(pr,lr); 
}
在我看来,我试图迭代

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)  %>
错误CS1061:'System.Collections.Generic.IEnumerable'不包含'dr'的定义且没有扩展方法

我通过制作一个视图模型来实现这一点,该视图模型特定于您需要的信息所在的视图

然后,在该ViewModel中,仅具有容纳其他模型的属性

大概是这样的:

error CS1061: 'System.Collections.Generic.IEnumerable<amief.Models.catnewModel>' does not contain a definition for 'dr' and no extension method 
公共类视图模型
{
公共列表产品(){get;set;}
公共列表链接ForProducts(){get;set;}
}
公共行动结果索引()
{ 
var-pr=db.products;
var lr=db.linksforproducts(2)
ViewModel模型=新的ViewModel();
模型.产品=pr;
model.LinksForProducts=lr;
返回视图(模型);
}

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

在您的情况下,这将是:

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

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

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

我不明白你的第二个问题,请详细说明。我的观点显示产品清单。我希望在运行时从DB中获取每个产品的数据(图像、标签…),我是否需要使用usercontrol并将产品id传递给他?在您看来,只需使用代码块来创建产品,并将标记粘贴在希望显示的位周围。ViewModel类的基本位置在哪里?我需要把它放在models文件夹中?我将模型与viewmodels分开。您的模型应该表示系统中的事物、人员、汽车、产品等,以及业务逻辑和验证逻辑。您的viewmodel是专门用于该视图的特定模型,因此我将其粘贴在名为ViewModels的文件夹中。在视图中,我尝试访问model.Products,但出现了一个错误。我认为该类是可以的。
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);
}
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); 
}