我有以下型号:
public class Page
{
public int PageID { get; set; }
public string Name { get; set; }
public string Content { get; set; }
public DateTime? DateCreated { get; set; }
public bool IsPublished { get; set; }
public string ModifiedBy { get; set; }
public DateTime? DateModified { get; set; }
public int UserID { get; set; }
public int CategoryID { get; set; }
public virtual User User { get; set; }
public virtual Category Category { get; set; }
}
public class Category
{
public int CategoryID { get; set; }
[Required(ErrorMessage = "Category name is required.")]
[Display(Name = "Category Name")]
public string Name { get; set; }
public virtual ICollection<Page> Pages { get; set; }
}
我希望填充此导航列表:
<div id="centeredmenu" class="nav-border nav-color">
<ul>
@foreach (var pages in Model)
{
<li>CATEGORY NAME GOES HERE
<ul>
@foreach (var pages in Model)
{
<li>PAGE NAMES GO HERE</li>
}
</ul>
</li>
}
</ul>
</div>
但是我在实现控制器方面遇到了问题。我试过这个ViewModel:
public class MainPageModels
{
public Category Categories { get; set; }
public Page Pages { get; set; }
}
但是这个错误消息让我更加困惑:
System.Data.Edm.EdmEntityType :: EntityType'MainPageModels'没有定义键。定义此EntityType的键。 System.Data.Edm.EdmEntitySet:EntityType:EntitySet MainModels 基于类型 MainPageModels ,没有定义键。
这是我的控制者:
public ActionResult Index()
{
var pages = db.MainModels.Select(p => p.Pages).Select(c => c.Category);
return View(pages);
}
我可能会在这里遗漏一些简单的东西。
答案 0 :(得分:2)
在此处发布代码/语法
public class Person
{
[Key]
public int PersonID { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
}
public class DataContext : DbContext
{
EntitySet<Person> Persons { get; set; }
}
您的视图模型可以执行以下操作
public class PersonAddViewModel
{
public string Name { get; set; }
public string LastName { get; set; }
public void CreateViewModelFromDataModel(Person person)
{
this.Name = person.Name;
this.LastName = person.LastName ;
}
}
这只是一个示例,只是为了显示数据模型和视图模型之间的区别 您的视图将是PersonAddViewModel的强类型视图
答案 1 :(得分:1)
这是我的父子列表问题的解决方案:
我创建了一个ViewModel来存放我的类别和页面:
public class HomeViewModels
{
[Key]
public int HomeViewKey { get; set; } //This is a MUST!
public IEnumerable<Category> ViewCategories { get; set; }
public IEnumerable<Page> ViewPages { get; set; }
public void CreateHomeViewModel(IEnumerable<Category> categories,
IEnumerable<Page> pages)
{
this.ViewCategories = categories;
this.ViewPages = pages;
}
}
然后编辑我的控制器以填充viewmodel:
public ActionResult Index()
{
HomeViewModels homePages = new HomeViewModels();
homePages.CreateHomeViewModel(db.Categories.ToList(),
db.Pages.ToList());
return View(homePages);
}
最后使用以下内容创建ul-li列表:
@{var hvCategories = Model.ViewCategories;}
@foreach (var categories in hvCategories)
{
<li>@Html.ActionLink(categories.Name, "Index", "Home")
<ul>
@{var hvPages = Model.ViewPages
.Where(p => p.CategoryID == categories.CategoryID);}
@foreach (var pages in hvPages)
{
<li>@Html.ActionLink(pages.Name, "Index", "Home")</li>
}
</ul>
</li>
我希望这有助于任何计划使用父子模型构建嵌套列表的人。这花了我两天时间弄明白。干杯!