如何将数据Controller发送到View

时间:2015-05-18 06:46:41

标签: c# asp.net-mvc razor

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.}

但我无法达到categoryId如何发送数据并从视图中获取数据?

3 个答案:

答案 0 :(得分:4)

根据您的控制器代码,您的视图会收到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 :(得分: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的情况下执行此操作。在这种情况下,将属性声明为模型类。为该属性赋值并将该模型传递给视图。

答案 2 :(得分:-1)

您可以通过ViewBag发送类别ID,

控制器动作中的

ViewBag.CategoryId = categoryId;

在视图中:

@if (ViewBag.CategoryId == 1)
{

}