2016-07-24 91 views
0

我完全新的ASP.net MVC实现对象的集合,在我看来模型 - ASP.net MVC

我有两个模型首先是

public class Category 
{ 
    public virtual int Id { get; set; } 
    [Required] 
    public virtual string CategoryName { get; set; } 
    public virtual List<SubCategory> SubCategories { get; set; } 

} 

和下一子类别模型:

public class SubCategory 
{ 
    public virtual int Id { get; set; } 

    public virtual int CategoryId { get; set; } 
    [Required] 
    public virtual string SubCategoryName { get; set; } 
    public virtual Category Category { get; set; } 
    public virtual List<Question> Questions { get; set; } 

} 

我需要我的类别列表,也都在我看来,子类别列表,所以这是我的视图模型

public class CategorySubCategoryViewMoel 
{ 
    public ICollection<Category> Category { get; set; } 
    public SubCategory SubCategory { get; set; } 


} 

,这里是我的观点

@model FinalSearch5.Models.CategorySubCategoryViewMoel 
<ul> 
    @foreach (var category in Model.Category) 
    { 
    <li>@category.CategoryName</li> 
    } 
</ul> 

这里是我的控制器

public ActionResult Index() 
    { 
     var cats = db.Categories.ToList(); 
     return View(cats); 
    } 

这不是一个完全实现还没有,但直到这里还有一个错误

模型项目通过到字典中的类型是'System.Collections.Generic.List1 [FinalSearch5.Models.Category],但是这个字典需要一个模型项目类型'FinalSearch5.Models.CategorySubCategoryViewMoel'。

欣赏如果帮助我什么是问题谢谢。

+0

的可能的复制[两种型号在一个视图中的ASP MVC 3](http://stackoverflow.com/questions/5550627/two-models -in-one-view-in-asp-mvc-3) – Aravind

+2

错误信息是不言自明的(你的视图期望'CategorySubCategoryViewMoel',但是你传递它'List ''Category'包含一个'SubCategory'的集合,你需要一个视图模型与2个独立的集合 - 当然你想要显示每个类别,并为每个类别,它的集合SubCategory(即嵌套'foreach'循环) –

+0

@Aravind谢谢你。我检查了一些相关问题。我的问题是,我有一个视图莫我的类别的集合德尔。如果我省略了这个集合,我在这一行中有编译错误'@foreach(Model.Category中的var类)' –

回答

2

您认为需要一个型号为CategorySubCategoryViewMoel的型号,但在Index()方法中,您返回的型号为List<Category>。为了它的工作,你可以在方法更改为

public ActionResult Index() 
{ 
    var model = new CategorySubCategoryViewMoel 
    { 
     Category = db.Categories.ToList() 
    } 
    return View(model); 
} 

注意,属性是一个集合,所以它的名字应该使用复数,而只需要为IEnumerablepublic IEnumerable<Category> Categories { get; set; }

但是它不清楚是什么你的视图模型的目的是。它唯一的其他属性是public SubCategory SubCategory { get; set; },您从不为其分配值或在视图中使用它。你的代码可以使用当前Index()方法,然后视图将

@model List<Category> 
<ul> 
    @foreach(var category in Model) 
    { 
     <li> 
      @category.CategoryName 
      <ul> 
       @foreach(var subCategory in category.SubCategories) 
       { 
        <li>@subCategory.SubCategoryName</li> 
       } 
      </ul> 
     <li> 
    } 
<ul> 
相关问题