0

ビューを複数回呼び出す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です。

どうやってやるの?

4

1 に答える 1

0

その場合は、MVC でウィザードを実装するためのベスト プラクティスをご覧ください。ここにいくつかの良い提案があります。個人的には、個別の個別の URL を使用することを引き続き検討します。また、ソリューションに db アクセス権がある場合でも、メイン モデルを更新する前に一時データを保存できます。ユーザーが最初のラウンドでジャーニー全体を完了しなかった場合にどうしたいかを考えてください...

于 2012-09-03T13:39:27.853 に答える