2

わかりました、このような質問が山ほどあり、私は約 1500 ポンドに目を通しました。私が見たものは、人々が間違ったタイプを送っているか、部分的な見方で何かをしていた. 私の場合はどちらもしていません。だから、私の正確なエラーは次のとおりです。

ディクショナリに渡されたモデル アイテムのタイプは「ClanSite.Models.ViewModels.CategoryViewModel」ですが、このディクショナリにはタイプ「ClanSite.Models.ViewModels.UserLoginViewModel」のモデル アイテムが必要です。

問題は、_Layout.cshtml (@model ClanSite.Models.ViewModels.UserLoginViewModel) にモデルがあり、すべてのページでユーザーにログインするために使用されることです。

しかし、それらのページの 1 つで、カテゴリのリストをレンダリングしようとしています。私の 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 と View でモデルを使用するにはどうすればよいでしょうか?

4

2 に答える 2

3

私は MVC にモデルを適切に使用する必要があるアプリケーションを持っていますが、私のアプローチは_Layout.cshtml. ログイン操作のように、すべてのページで必要なために で定義されている_Layout.cshtml場合は、RenderPartial呼び出しを使用し、特定のモデルも作成する必要があります。

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

すべてのページで、適切なモデルを使用して部分ビューを使用できます。その後、通常のビューを作成し、モデルの競合なしでRenderBody()タグ内に表示できます。_Layout.cshtml

于 2012-12-13T10:57:54.500 に答える
0

私は実際にこれをかなり簡単に回避することができました。public UserLoginViewModel メンバーのみを含むインターフェイス ILayout を作成しました。次に、このインターフェイスを CategoryViewModel に実装します。つまり、UserLoginViewModel を CategoryViewModel に追加する必要がありますが、これはまったく問題ではありません。ログインのために変更する必要があったのは、ログインを処理するアクションから UserLoginViewModel をビューに送信する代わりに、ILayout を送信することだけでした。

于 2012-06-10T02:24:29.000 に答える