2

好的,有很多这样的问题,我已经浏览了大约 1500 磅。我看到的那些,人们要么发送了错误的类型,要么他们在做一些偏颇的事情。在我的情况下,我都没有这样做。所以,我的确切错误是:

传入字典的模型项的类型为“ClanSite.Models.ViewModels.CategoryViewModel”,但此字典需要类型为“ClanSite.Models.ViewModels.UserLoginViewModel”的模型项。

问题是我的 _Layout.cshtml (@model ClanSite.Models.ViewModels.UserLoginViewModel) 上有一个模型,用于在每个页面上登录用户。

但是,在其中一个页面上,我正在尝试呈现类别列表。我的 CategoryViewModel 只包含一个类别列表,GetCategories() 返回该列表。

控制器

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.CategoryInfo.Description

这真的让我很困惑,因为我能够使用该模型在另一个页面上创建用户注册表单而没有任何问题。那么,如何在 _Layout 和视图中使用模型,而我只是在其中循环输出数据?

4

2 回答 2

3

我在 MVC 中确实有一个应用程序,它也需要很好地使用模型,我的方法是不在_Layout.cshtml. 如果存在这种情况,例如登录操作,所有页面都需要并因此在 中定义,_Layout.cshtml则应RenderPartial使用调用并还应创建特定的模型。

<section id="login">
    @{ Html.RenderPartial("_Login", new MyProjectName.Models.Account.LoginModel()); }
</section>

All the pages will have the Partial View available and with its proper Model. Normal Views can then be created and displayed in the RenderBody() tag inside _Layout.cshtml without any Model conflicts.

于 2012-12-13T10:57:54.500 回答
0

我实际上能够很容易地解决这个问题。我刚刚制作了一个仅包含公共 UserLoginViewModel 成员的界面 ILayout。然后我在我的 CategoryViewModel 中实现这个接口。这意味着,我需要将 UserLoginViewModel 添加到 CategoryViewModel,但这根本不是问题。登录时我唯一需要更改的是,我没有从处理登录的 Action 将 UserLoginViewModel 发送到 View,而是发送了 ILayout。

于 2012-06-10T02:24:29.000 回答