【发布时间】:2016-08-10 08:08:19
【问题描述】:
我有一个包含局部视图的布局页面。局部视图需要遍历视图模型上的属性以显示类别列表。显示类别时,我需要显示该类别中的文档列表。 /Home/Index 有效,但是当我尝试查看 /Documents/Category/{id} 时,出现错误:
附加信息:传入字典的模型项的类型为“System.Collections.Generic.List`1[ViewModels.DocumentViewModel]”,但此字典需要“ViewModels.HomeViewModel”类型的模型项。
_Layout.cshtml
...
<body>
@Html.Partial("_CategoryViewModel")
<div class="content">
@RenderBody()
</div>
HomeViewModel.cs
public class HomeViewModel {
...
public ICollection<DocumentCategory> Categories { get; set; }
public ICollection<Documents> Documents { get; set; }
...
}
_CategoryViewModel.cshtml(这应该显示所有类别的列表)
@model ViewModels.HomeViewModel
...
@foreach (DocumentCategory item in Model.Categories)
{
<li>
<a href="@Url.Action("Category", "Documents", new { @id = @item.CategoryId })" title="View documents in the @item.Name category">
<span class="fa fa-files-o"></span> @item.Name
</a>
</li>
}
DocumentsController.cs
public ActionResult Category(int id)
{
var thisCategory = _ctx.Categories.Get(c => c.CategoryId == id).FirstOrDefault();
IEnumerable<DocumentViewModel> docs = null;
if(thisCategory == null)
{
TempData.Add("errorMessage", "Invalid category");
} else {
docs = thisCategory.Documents.ToList();
}
return View("Category", docs);
}
发生的事情有点道理——布局页面上的PartialView 需要枚举我正在使用的ViewModel 中不存在的集合。我不知道如何实现这一点 - 唯一的方法似乎是将 Categories 属性添加到我网站中的每个 ViewModel。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 viewmodel asp.net-mvc-viewmodel