59

ビューを呼び出すコントローラーがあります。ビューにはPartialViewbe と呼ばれるものがあり、@Html.Partial("ViewName", model).これは正常に機能します。

しかしcontroller、ビューに渡すビューモデルに入れるのが難しいものをビューバッグに入れたいと思っています。メイン ビューでは に問題なくアクセスできますが、ViewBagではPartialView何も返されません。

この場合に を使用することは可能ですか、それともこのデータをビューに渡すモデル (および に渡すモデル、および最初の にネストされたに渡すモデル)ViewBagに「ハック」する必要がありますか?PartialViewPartialViewPartialView

4

8 に答える 8

59

それは問題なく動作するはずです。HomeController Indexアクションで、ViewBagにメッセージを追加します。

ViewBag.Message = "Welcome to ASP.NET MVC!";

インデックスビューで、部分ビューを追加します。

@Html.Partial("ViewName")

そして、部分ビューでメッセージをレンダリングします。

@ViewBag.Message

以下のコメントから:モデルを部分ビューに渡すときに問題があるようです。次に、元のViewBagを参照できます。

@ViewContext.Controller.ViewBag.Message
于 2011-04-20T21:54:35.290 に答える
34

Html.Partial()入力パラメーターの 1 つであるwhereのオーバーロードを使用している場合viewData、たとえば、次のようになります。

@Html.Partial("PartialViewName", Model, new ViewDataDictionary(ViewBag))

部分ビューには、元の ViewBag からのデータは表示されません。

を削除するnew ViewDataDictionary(ViewBag)ので、書く必要があります

@Html.Partial("PartialViewName", Model)
于 2013-06-17T11:56:30.760 に答える
2

>一般的なシナリオでは、Html.Partial を使用する場合。

Html.Partial("partialViewName");

parentView に送信されるモデルは、partialViewName で使用できます。また、parentView に送信される ViewData は、partialViewName にも使用できます。

>特殊なケースとして、Html.Partial を使用し、Model. を送信する場合。

Html.Partial("partialViewName", newModel);

parentView に送信されたモデルに到達できません。したがって、これ以降、partialViewName でアクティブなモデルは newModel です。parentView に送信される viewData は、partialViewName にも使用できます。

>特殊なケースとして、Html.Partial を使用し、ViewDataDictionary を送信する場合。

parentView に送信されるモデルは、partialViewName にも使用できます

私。

@Html.Partial("partialViewName", new ViewDataDictionary { { "key", value }, { "key2", value2 }  })

ここで、parentView に送信された ViewData は、「new ViewDataDictionary」によって上書きされます。

ここで、parentView 用の ViewBag がある場合、上記のようなコードを書くとそこまでたどり着けません。

Ⅱ.

ViewDataDictionary viewDataDictionary =  new ViewDataDictionary();
viewDataDictionary.Add("key", value);
viewDataDictionary.Add("key2", value2);
@Html.Partial("partialViewName", viewDataDictionary)

この使用法は最初のもの (I.) と同じです。

III.

ViewDataDictionary viewDataDictionary = ViewData; //If you use this code block,  ViewBag which is sent for parent View is not lost.
viewDataDictionary.Add("key", value);
viewDataDictionary.Add("key2", value2);
@Html.Partial("partialViewName", viewDataDictionary)

このコード ブロックを使用すると、partialViewName で parentView に送信される ViewData と ViewBag に到達できます。

于 2019-04-12T11:37:36.773 に答える
1

非常に基本的なページで同じ問題が発生していました。

@Html.Partial("_AppIntro")

<div class="form-group row">
    <div class="col-md-10">
        <a href="/Ag/Application/1" class="btn btn-default btn-primary">Next</a>
    </div>
</div>

また、部分ビューには、コントローラーから渡された動的な値を取得するための ViewBag への参照を含むテキストのみが含まれていました。部分ビューの名前が重要であることが判明しました。部分的なページを削除し、[追加] -> [表示] -> [MVC 5 ビュー] で再作成しましたが、ページに _AppIntro.cshtml という名前を付けると修正されました。

于 2017-10-25T15:28:02.313 に答える