0

私は 2 つのビューを持っています。最初のビューには、送信時にモデル ビュー (QuizzModelView) に入力するフォームがあります。

送信後、送信したいフォームもある別のビューにリダイレクトされます。問題は、2 つのビューに同じ QuizzModelView を使用したいということです。つまり、2 番目のフォームを送信するときに、前のフォームの値も送信したいということです。これを行うには、最初のビューからの値を取る非表示の入力を作成します。

非表示の入力なしでそれを行う方法はありますか。

ありがとう

編集:詳細を説明するには:

私のモデルビューには次が含まれます:QuizzModelView.field1、QuizzModelView、.field2

  • 最初のステップ: View1 は QuizzModelView.field1 を埋めます

  • 2 番目のステップ: view2 にリダイレクトされます

  • 3 番目のステップ: View2 は QuizzModelView.field2 を埋めます

ここで、QuizzModelView.field1 と QuizzModelView.field2 を取得できるようにしたいと考えています。ただし、View2 を送信すると QuizzModelView.field1 が失われるため、QuizzModelView.field2 のみを取得します。

ここに私の行動があります:

[HttpPost]
public ActionResult TAFPart2PopupEvents(QuizzModelView model)
{
    return PartialView("PartialViews/_TAFPart2PopupEvents", model);
}


[HttpPost]
public ActionResult TAFPart3PopupEvents(QuizzModelView model)         
{
    // here I want to use 
    // model.field1 and model.field2
}
4

2 に答える 2

0

技術的に (衒学的に)、モデルの同じインスタンスを使用することはできません。ただし、それをセッションに入れて、リダイレクトを介して渡すことはできます。セッションには、隠しフィールドほど簡単に改ざんされないという利点があります。さらに、各ステップでモデル全体を実際にバインドする必要はありません。各ステップの単一フィールドのみです。

[HttpPost]
public ActionResult TAFPart2PopupEvents(string field1)
{
    QuizzModelView model = new QuizzModelView();
    model.Field1 = field1
    Session["Quiz"] = model;

    return PartialView("PartialViews/_TAFPart2PopupEvents", model);
}

[HttpPost]
public ActionResult TAFPart3PopupEvents(string field2)         
{
    var model= (QuizzModelView )Session["Quiz"];

    // Fill in field2 here
    model.Field2 = field2;

}

編集:実際の詳細でブライアンのコメントに対処するには-

セッションを使用したこの方法は、隠しフィールドよりもデータの改ざんの影響を受けにくいです。ビューに非表示のフィールドがあると、悪意のあるユーザーが以前のデータを簡単に上書きする可能性があります。モデルのサイズによっては、隠しフィールドによってビューが少し大きくなる可能性もあります。

セッションには期限切れという欠点もあります。有効期限を処理する簡単な方法を次に示します。これが Ajax 経由で呼び出された場合は、クライアントで処理する代わりにエラー メッセージをクライアントに返す必要があります。

[HttpPost]
public ActionResult TAFPart3PopupEvents(string field2)         
{
    var model= Session["Quiz"] as QuizzModelView;

    if (model == null)
    {
        // Add some kind of message here.
        // TempData is like Session, but only persists across one request.
        TempData["message"] = "Session Expired!";

        return RedirectToAction("Index");
    }

    // Fill in field2 here
    model.Field2 = field2;

    ....
}
于 2012-04-18T14:40:06.490 に答える
0

TAFPart3PopupEventsアクションがデータにアクセスできるようにする場合は、データをどこかに保存する必要があります。さまざまなオプション (セッション、クエリ文字列、データベース) がありますが、(一般的に) 非表示の入力が最も簡単だと思います。

于 2012-04-18T14:37:28.090 に答える