好的,有很多这样的问题,我已经浏览了大约 1500 磅。 我看到的那些,人们要么发送了错误的类型,要么他们正在做一些带有部分视图的事情。 就我而言,我两者都没有做。 所以,我的确切错误是:
传递到字典中的模型项类型为"ClanSite.Models.ViewModels.CategoryViewModel",但此字典需要类型为"ClanSite.Models.ViewModels.UserLoginViewModel"的模型项。
问题是我的_Layout.cshtml(@model ClanSite.Models.ViewModels.UserLoginViewModel)上有一个模型,用于在每个页面上登录用户。
但是,在其中一个页面上,我正在尝试呈现类别列表。 My CategoryViewModel 只包含一个 List of Category,GetCategories() 返回该 List。
控制器
public ActionResult Categories()
{
CategoryViewModel cats = new CategoryViewModel();
try
{
cats.Categories = ForumQueries.GetCategories();
}
catch
{
return RedirectToAction("Message", new { msg = "categories" });
}
return View(cats);
}
视图
@model ClanSite.Models.ViewModels.CategoryViewModel
@{
ViewBag.Title = "clanSite - Categories";
}
<div class="forumPostTable">
@foreach (ClanSite.Models.Tables.Join.Category cat in Model.Categories)
{
<div class="forumPostTableRow cursorPointer" onclick="linkTo('@Url.Action("Index", "Home")')">
<div class="forumCategoryTableCellTitle">
<div class="forumCategoryTitle">
<a href="" class="linkNoDecGold">Title</a>
</div>
<div class="forumCategoryTitleDesc">
@cat.CategoryInfo.Description
</div>
</div>
</div>
}
</div>
当我尝试转到此页面时,出现错误。 我使用调试器逐步浏览了页面,并获得了正确的数据:@cat。分类信息说明
这真的让我感到困惑,因为我能够使用该模型在另一个页面上创建用于用户注册的表单,而不会出现任何问题。 那么,如何在_Layout和视图中使用模型,在其中我只是循环数据进行输出?
我在 MVC 中确实有一个应用程序,它也需要很好地使用模型,我的方法是不在_Layout.cshtml
中使用模型。如果存在这种情况,例如登录操作,在所有页面中都需要,因此在_Layout.cshtml
中定义,则应使用RenderPartial
调用,并且还应创建特定的模型。
<section id="login">
@{ Html.RenderPartial("_Login", new MyProjectName.Models.Account.LoginModel()); }
</section>
所有页面都将具有可用的部分视图及其正确的模型。然后,可以在_Layout.cshtml
内部的 RenderBody()
标记中创建和显示普通视图,而不会发生任何模型冲突。
我实际上能够相当轻松地解决这个问题。 我刚刚制作了一个仅包含公共UserLoginViewModel成员的接口ILayout。 然后,我在我的 CategoryViewModel 中实现此接口。 这意味着,我需要将UserLoginViewModel添加到CategoryViewModel,但这根本不是问题。 我唯一需要更改登录的方法是,我没有从处理登录的操作将UserLoginViewModel发送到视图,而是发送了ILayout。