2016-02-07 4 views
0

на самом деле его не два ViewModel в моем случае только один, но я пытаюсь передать одно значение продукта, а затем список продуктов ниже мой контроллер, так что вы можете лучше понятьКак передать два ViewModel данных для просмотра

 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; 

, но не знаете, как получить значение списка Viewbag.productpicture ввиду бритвой. и это хороший способ передать значение с помощью viewbag или есть ли какой-либо другой метод?

+1

Создайте модель с 2 свойствами 'ProductViewModel Product' и' IEnumerable ProductList' и верните их в представление –

+0

Еще раз спасибо stephan, отправьте это в ответ, чтобы я мог отметить это как ответ. –

+0

Ответ добавлен для ответа на вопрос, но ваш код подсказывает, что вам может потребоваться изменить один «Продукт», и на той же странице также отображается список всех «Продуктов», и в этом случае это может оказаться не лучшим решением. –

ответ

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