一般に、ビューモデルを使用することをお勧めします。それらを使用する利点はいくつかあります。ビューモデルの詳細の多くは、インターネットやスタックオーバーフローでも見つけることができると思います。
したがって、例または出発点を挙げ
ましょう。ビューモデルがあるとしましょう。
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