3

私はまだMVC3に比較的慣れていません。@Html.Actionメソッドからコントローラーを介して部分ビューにデータを渡す必要があります。

これが私の流れです。

@ Html.Actionを次のように呼び出します:

@Html.Action("SidebarMain", "Home", new List<int>(new int[] {1, 2, 3}))

それからそれは私のコントローラーに当たるでしょう。これが私のホームコントローラーでの私の方法です:

public ActionResult SidebarMain(List<int> items)
{
    return View(items);
}

次に、部分ビューは次のようにデータにアクセスできるはずです。

@model List<int>

@{
    ViewBag.Title = "SidebarMain";
    Layout = null;
}

<div>
@foreach (int item in Model)
{
    <div>@item</div>
}
</div>

しかし、モデルに対してnull例外が発生します。これは、モデルが通過しないことを意味します。

4

4 に答える 4

5

これを試して:

Html.Action("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) })

そして、サイドバーのメインアクションにブレークポイントを設定して、items

于 2013-01-20T02:10:05.213 に答える
1

つまり、コードに。のitemsパラメータ名がありませんHtml.Action()。それ以外は、コードは機能している必要があります。

Html.Action("SidebarMain", "Home", new {items = new List<int>(new int[] {1, 2, 3}) })

推奨される方法として、ViewModel整数の配列を送信するだけでなく、専用のビューを使用します。なぜなら、このようにクリーンな方法でViewModel-ビューに表示するプロパティのコンテナであるため、コードは常に進化するため、コードは後で他のプロパティを追加する可能性があります。

ViewModelの概念の使用法への参照:演習5:ビューモデルの作成

于 2013-01-20T02:20:41.070 に答える
0

ダースベイダーからの良い答え。これをAjaxとして返しますか?メインビューに埋め込む場合は、実際には、PartialViewとして返す必要があります。

return PartialView("SidebarMain", model);

ここで、SidebarMainは返される部分ビューの名前です。これをDarthVaderが提案したものと組み合わせて試して、モデルがビューに戻されることを確認してください。

投稿した後、Html.Actionを使用していることに気付きました。これが真のサイドバーである場合は、部分ビューとしてajaxをロードする必要があります。

Ajax.ActionLink("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) })

これにより、現在のページにとどまることができます。ajax機能をお探しでない場合は、ラビットトレイルをお詫びします:)

于 2013-01-20T02:15:18.290 に答える
0

ダースベイダーの提案はうまくいったかもしれません。これは私がやったことです:

1)コントローラーを取り外した

2)次のように呼びます:

@{Html.RenderPartial("SidebarMain", new int[] {1,3,4,2});}

3)これが私のビューコードです:

@model int[]
@foreach( int item in Model){
...
于 2014-08-21T17:39:02.683 に答える