私はこれを簡潔に保つようにします:
ビューで
@Html.RenderPartial("myview", Model.SubModel,
new ViewDataDictionary()
{
{ "thing", Model.Thing }
})
myviewでは、「thing」が使用可能であることがわかります。つまり、これによりModel.Thingの値がmyviewビューで生成されます。
@ViewBag.thing
素晴らしい!単純
しかし、私は物事で何かをする必要があります(そして、物事はサブモデルの一部になることはできません)。つまり、ビューエンジンまたは理想的にはコントローラーでこれにアクセスします。例:
public ActionResult myview(SubModelType vm)
{
var thing = ViewBag.thing; // oh dear this doesnt exist.. but is there when the view is rendered
だから私の質問は、ViewBagが結果のmyviewで利用できる場合、それはhttpcontextで、またはどこかでcontrollercontextで何らかの形で渡されている必要があるということです。コントローラーで使用できないのにビューに表示されている理由と、これにアクセスする方法を知っている人はいますか?
編集
申し訳ありませんが、ここで重要なポイントを逃しました!「myview」がコントローラーにポストバックされ、myviewと呼ばれるアクションが呼び出され、myviewにレンダリングされたViewBagが使用可能になると予想されます。しかしもちろんそうではありません、それは「myview」で使われました、そしてそれはそれです。したがって、myviewアクションで使用する場合は、そのビューのViewBagに格納するか、アクションに戻すことができるようにビューモデルの値を設定する必要があります。
それは理にかなっていますか?