ビューを複数回呼び出すMVC4コントローラーがあり、そのたびに異なるViewBagのセットが使用されます。ビューは、次のような方法で、これらのViewBagの有無に基づいてフォームのコンテンツをレンダリングします。
@using (Html.BeginForm())
{
@if (ViewBag.Foo1 != null)
{
@Html.DropDownList("Bar1",....
}
@if (ViewBag.Foo2 != null)
{
@Html.DropDownList("Bar2",....
}
<input name="ActionButton" type="submit" value="Ok"" />
}
ユーザーが送信ボタンをクリックするたびに、コントローラーはコレクションの内容を確認し、ビューを再度呼び出す前に、次のように新しいViewBagのセットを作成します。
public ActionResult Create()
{
ViewBag.Foo1 = "blawblaw";
return View();
}
[HttpPost]
public ActionResult Create(FormCollection collection)
{
if (collection["Bar1"] != null)
{
string FirstPass = collection["Bar1"];
ViewBag.Foo2 = "blawblaw";
}
if (collection["Bar2"] != null)
{
string SecondPass = collection["Bar2"];
ViewBag.Foo3 = "blawblaw";
}
return View();
}
私が今やらなければならないことは、どういうわけか、コントローラーの各パスに前のパスについての何かを「覚えて」もらうことです。つまり、私の例では、コントローラーを通過する2番目のパス(collection ["Bar2"]がtrueであるパス)では、FirstPassの値はnullです。
どうやってやるの?