【问题标题】:How to pass two viewmodel data to view如何将两个视图模型数据传递给视图
【发布时间】:2016-02-07 17:34:54
【问题描述】:

实际上,在我的情况下它不是两个视图模型,只有一个,但我试图传递一个产品值,然后下面的产品列表是我的控制器,以便您更好地理解

      public ActionResult Filter(long? id)
            {
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
//select a single product
                ProductViewModel products = new ProductViewModel();
                var pro = db.Products.Find(id);

                if (pro != null)
                {
                    products.ProductId = pro.ProductId;
                    products.ProductName = pro.ProductName;
                    products.AddDate = pro.AddDate;
                    products.ApplicationUserId = pro.ApplicationUserId;
                    products.ProductDescription = pro.ProductDescription;
                    products.ProductPictures = db.ProductPictures.Where(m => m.ProductId == id).ToList();



                }


               //Now creating list 

                ProductViewModel product = new ProductViewModel();
                var pictures = db.ProductPictures;
                var model = db.Products.Where(p=>p.ApplicationUserId==User.Identity.GetUserId()).Select(p => new ProductViewModel
                {
                    ProductId = p.ProductId,
                    ProductName = p.ProductName,
                    ProductDescription = p.ProductDescription,
                    ProductPictures = pictures.Where(x => x.ProductId == p.ProductId),
                    Category = p.Category,
                    AddDate = p.AddDate,
                    ApplicationUserId = p.ApplicationUserId,

                });


                return View(model);
            }

但是我如何将这两个值传递给我尝试将单个产品的 viewbag 作为视图的视图

  ViewBag.ProductId = pro.ProductId;
                    ViewBag.ProductName = pro.ProductName;
                    ViewBag.AddDate = pro.AddDate;
                    ViewBag.ApplicationUserId = pro.ApplicationUserId;
                    ViewBag.ProductDescription = pro.ProductDescription;
                    ViewBag.ProductPictures = db.ProductPictures.Where(m => m.ProductId == id).ToList();

                    ViewBag.idd = pro.ProductId;

但不知道如何在 razor 视图中获取列表 Viewbag.productpicture 的值。是使用viewbag传递价值的好方法还是有其他方法??

【问题讨论】:

  • 创建一个具有 2 个属性 ProductViewModel ProductIEnumerable<ProductViewModel> ProductList 的视图模型并将其返回给视图
  • 再次感谢斯蒂芬,将其发布在答案中,以便我将其标记为答案。
  • 已添加答案以解决该问题,但您的代码表明您可能想要编辑一个 Product 并且在同一页面上还显示所有 Product 的列表,在这种情况下可能不会成为最好的解决方案。
  • 不,我不会编辑,而是选择产品并创建一个组合包.....进行编辑我认为部分视图将是最好的解决方案,对吧??
  • OK(不确定您要达到的目的)对于编辑视图,您只需要返回一个 ProductViewModel

标签: asp.net-mvc list razor asp.net-mvc-viewmodel


【解决方案1】:

创建一个包含对象属性和对象集合的视图模型,例如

public CombinedProductVM
{
  public ProductViewModel Product { get; set; }
  public IEnumerable<ProductViewModel> ProductList { get; set; }
}

并在 GET 方法中,初始化一个新实例并设置属性

CombinedProductVM model = new CombinedProductVM
{
  Product = // your first query above
  ProductList = // your second query above
};
return View(model);

在视图中使用@model CombinedProductVM

【讨论】:

    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 2011-02-20
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多