1

送信時にこのモデル オブジェクトが更新されるように、モデル オブジェクトを create view に渡す必要があります。しかし同時に、動的メニューをレンダリングするために、メインのレイアウトでデータのリストを使用しています。

どちらも同じモデル クラスを使用します。しかし、私は次のように与えます

@model IEnumerable<DynaPortalMVC.Models.Page>

そして、作成ビューで私は次のように与えます

@model DynaPortalMVC.Models.Page

コントローラーで:-

public ActionResult Create()
    {           
        return View();
    } 

しかし、これにより _Layout.cshtml でエラーが発生するため、上記の actionresult は実行されません。

Exception Details: System.ArgumentNullException: Value cannot be null.Parameter name: source

したがって、Ienumerable オブジェクトを渡してビューを作成し、そこで単純なモデル オブジェクトに変換して、更新できるようにする必要があると思います。これについてアドバイスをください。

4

1 に答える 1

2

レイアウトに @model ディレクティブを含める必要があるかどうかは疑問です。私の意見では、HtmlHelper.Action メソッドを呼び出してレイアウトから呼び出した部分ビューとコントローラーのアクションを使用して動的メニューをレンダリングする必要があります。次のようになります。

メニューの部分ビュー (_Menu.cshtml という名前のファイル):

@model IEnumerable<DynaPortalMVC.Models.Page>

<ul>
@foreach (var page in Model)
{
    <li>@page.Name</li>    
}
</ul>

Home コントローラー (またはその他) の _Menu という名前のアクション:

public ActionResult _Menu()
    {
        IEnumerable<DynaPortalMVC.Models.Page> model = new List<DynaPortalMVC.Models.Page>
        {
            new DynaPortalMVC.Models.Page { Name = "Page1" },
            new DynaPortalMVC.Models.Page { Name = "Page2" },
            new DynaPortalMVC.Models.Page { Name = "Page3" },
            new DynaPortalMVC.Models.Page { Name = "Page4" },
        };

        return PartialView("_Menu", model);
    }

メニューをレンダリングするレイアウトの次のコード行:

@Html.Action("_Menu", "Home")
于 2013-04-03T11:53:07.987 に答える