C# 如何将数据控制器发送到视图
我有产品控制器,这是我按类别发送产品以查看的方法 我想查看我视图中的类别ID 像这样,C# 如何将数据控制器发送到视图,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有产品控制器,这是我按类别发送产品以查看的方法 我想查看我视图中的类别ID 像这样, public ActionResult Detay(int? categoryId) { var categories = categoryService.CategoriesToList(); if (categoryId == null) { var products = productService.Products().ToList();
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如何发送数据并从视图中获取数据 您可以通过ViewBag发送类别id 在控制员的行动中:
@if(categoryId==1){//do this.}
鉴于:
ViewBag.CategoryId = categoryId;
根据控制器代码,视图接收的是
IEnumerable
模型,而不是产品本身。
创建新的viewmodel并使用它:
@if (ViewBag.CategoryId == 1)
{
}
或者在您的视图中使用@Model.First().CategoryId
视图模型:
@model ProductsViewModel
@if(Model.CategoryId==1)..
视图:
注意:您可以在不使用viewmodel的情况下执行此操作。在这种情况下,向模型类声明属性。为该属性赋值,并将该模型传递给视图。尝试ViewBagViewBag.category=“assign”
在控制器和视图中@if(@ViewBag.category==“1”){//执行此操作。}
尝试传递产品的对象,如prod=products.Where(a=>a.CategoryId==CategoryId);返回视图(prod);在视图中,您需要接受模型作为产品,您需要访问您返回的模型的属性(在您的情况下,模型是一个集合,因此可能model[0].CategoryId
或者您可以将值分配给控制器中的ViewBag
属性,并使用ViewBag.CategoryId
在这种情况下使用ViewBag不是一个很好的主意,因为它不是强类型的。而且此数据显然属于模型。是的,我知道它属于模型,但它是一种非常快速和清晰的执行方式这是必需的任务。事实上,强类型解决方案总是首选,它也非常快速和清晰。不要使用ViewBag。还有更多。。。
@model ProductsViewModel
@if(Model.CategoryId==1)..
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.