通常,使用视图模型是一种很好的做法。使用它们有几个优点。我认为 viewmodel 的很多细节,你可以在互联网上找到,也可以在堆栈溢出上找到。
因此,让我举一个例子或一个起点,
假设我们有一个视图模型;
public class CategoryViewModel
{
[Key]
public int CategoryId { get; set; }
[Required(ErrorMessage="* required")]
[Display(Name="Name")]
public string CategoryName { get; set; }
[Display(Name = "Description")]
public string CategoryDescription { get; set; }
public ICollection<SubCategory> SubCategories { get; set; }
}
现在,如果你想在你的存储库项目中使用它。你可以做这样的事情;
public List<CategoryViewModel> GetAllCategories()
{
using (var db =new Entities())
{
var categoriesList = db .Categories
.Select(c => new CategoryViewModel()
{
CategoryId = c.CategoryId,
CategoryName = c.Name,
CategoryDescription = c.Description
});
return categoriesList.ToList<CategoryViewModel>();
};
}
如你看到的。在视图模型的情况下,您需要使用投影(因为我已将我的实体投影到视图模型)。
现在,在您的控制器中,您可以轻松访问它们并将其传递给视图本身;
ICategoryRepository _catRepo;
public CategoryController(ICategoryRepository catRepo)
{
//note that i have also used the dependancy injection. so i'm skiping that
_catRepo = catRepo;
}
public ActionResult Index()
{
//ViewBag.CategoriesList = _catRepo.GetAllCategories();
or
return View(_catRepo.GetAllCategories());
}
现在,您的视图应该是类型CategoryViewModel
(强类型)
@model IEnumerable<CategoryViewModel>
@foreach (var item in Model)
{
<h1>@item.CategoryName</h1>
}
我希望这能给你一个起点。如果您需要我提供更多信息,请告诉我:D