2015-05-18 3 views
2
public ActionResult Detay(int? categoryId) 
{ 
    var categories = categoryService.CategoriesToList(); 
    if (categoryId == null) 
    { 
     var products = productService.Products().ToList(); 

     return RedirectToAction("Index"); 
    } 
    else 
    { 
     var products = productService 
         .CategoryProducts((int) categoryId, 50) 
         .ToList(); 
     var result = products.Where(a => a.CategoryId == categoryId); 
     return View(result); 
    } 

} 

У меня есть контроллер продукта, и это мой метод отправки товаров для просмотра по категориям.Как отправить данные Контроллер для просмотра

Я хочу, чтобы проверить CategoryId на мой взгляд

Как это;

@if(categoryId==1){//do this.} 

Но я не могу достичь категории. Как я могу отправить эти данные и получить данные из вида?

+0

Попробуйте ViewBag 'ViewBag.category =" присваивать ";' на контроллере и в поле зрения '@if (@ ViewBag.category ==" 1 ") {// делаем это.}' – Sachu

+0

Попробуйте передать объект продукта как Product prod = products.Where (a => a.CategoryId == categoryId); return view (prod); И в виду, что вам нужно принять модель как продукт – Mairaj

+0

Вам нужно получить доступ к свойству модели, возвращаемому вами (в вашем случае модель представляет собой коллекцию, поэтому, возможно, «Model [0] .CategoryId' или вы можете присвоить значение' Свойство ViewBag' в контроллере и использование 'ViewBag.CategoryId' –

ответ

4

Согласно кода контроллеров, ваш View получает IEnumerable<Product> в качестве модели а не Product. Либо создать новый ViewModel и использовать его:

public class ProductsViewModel 
{ 
    public int CategoryId {get;set;} 
    public IEnumerable<Product> Products {get;set;} 
} 

и на ваш взгляд:

@model ProductsViewModel 

@if(Model.CategoryId==1).. 

или в использовании вид @Model.First().CategoryId

-1

Вы можете отправить идентификатор категории через ViewBag,

в действии контроллера:

ViewBag.CategoryId = categoryId; 

в виду:

@if (ViewBag.CategoryId == 1) 
{ 

} 
+0

Использование ViewBag в этом случае не очень хорошая идея, так как оно не сильно типизировано. И эти данные явно относятся к модели. –

+0

да, я знаю, что это принадлежит модель, но это очень быстрый и понятный способ выполнить требуемую задачу. –

+0

Действительно, строго типизированное решение всегда предпочтительнее, что также очень быстро и понятно. Не используйте ViewBag. –

0

Посмотреть модели:

public class ProductsViewModel 
{ 
    public int CategoryId{get;set;} 
    public IEnumerable<Product> Products {get;set;} 
} 

контроллер :

public ActionResult Detay(int? categoryId) 
{ 
    var productVM= new ProductsViewModel(); 
    var products = productService 
         .CategoryProducts((int) categoryId, 50) 
         .ToList(); 
    productVM.Products = products.Where(a => a.CategoryId == categoryId); 
    productVM.CategoryId=1 // ex. your value 
    return View("Detay", productVM); 
} 

вид:

@model ProductsViewModel 
@if(Model.CategoryId==1).. // then you can use like this. 

Примечание: вы можете сделать это без использования ViewModel. в этом случае объявить свойство моделировать класс. присвойте этому свойству значение и передайте эту модель в представление.

Смежные вопросы