传递到字典中的模型项属于类型 A,但此字典需要类型 B 的模型项



好的,有很多这样的问题,我已经浏览了大约 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。

相关内容

  • 没有找到相关文章

最新更新