Search code examples
asp.net-mvclistrazorasp.net-mvc-viewmodel

How to pass two viewmodel data to view


Actually its not two viewmodel in my case only one but I am trying to pass a single value of product and then a list of products below is my controller so you can understand better

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

but how can i pass both values to the view i tried viewbag for single product as

  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;

but dont know how to get value of list Viewbag.productpicture in razor view. and is it good way to pass value using viewbag or is there any other method??


Solution

  • Create a view model containing properties for the object and collection of objects, for example

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

    and in the GET method, initialize a new instance and set the properties

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

    and in the view use @model CombinedProductVM