0

ユーザーから入力(フォーム)を取得する必要がある状況があります。続行ボタンを押すと、次のビュー ページが表示されます。しかし、続行が押された後、モデルをDBに保存したくありません。以前にユーザーから提供された入力に従っていくつかの詳細を表示し(いくつかのテーブルを組み合わせて)、ユーザーからいくつかのデータを再度取得する必要があります。そうして初めて、モデルをそれぞれのテーブルに保存したいと思います。どうすればこれを実行できますか? ユーザーから取得Modelして、次のページを生成する関数に渡してみました。これはそれを行う方法ですか?または他の方法がありますか?

4

2 に答える 2

1

最初のフォームで送信されたモデルを に保存しsessionます。

[HttpPost]
public ActionResult ContinueForm1(Model1 model1)
{
    if(ModelState.IsValid)
    {
       Session["Model1"] = model1;

       return View("Form2");
    }

    return View();
}

[HttpPost]
public ActionResult ContinueForm2(Model2 model2)
{
     if(ModelState.IsValid)
     {
        ... model2 is already here, get the model1 from session
        ... and save to datatbase finally return a different view or redirect to some
        ... other action
     }

     return View();
}
于 2012-06-26T09:25:39.973 に答える
0

あなたは正しい道を進んでいます。

最初のビューから返されたモデルを取得する必要があります。db モデルに直接バインドするのではなく、ここで ViewModel を使用することをお勧めします。http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/を見て、ビューモデルを使用する必要があるのはなぜですか? なぜこれらが良いことなのかについて。

これを行う最も簡単な方法は、モデルを引数としてメソッドに渡すことです。

ビューが同じViewModelを使用していると仮定すると(これは真実である場合とそうでない場合があります)、ビューモデルを新しいビューに直接送信できます-そうでない場合は、要素を新しいビューモデルにコピーして送信できます。

例えば

[HttpPost]
public ViewResult Step1(MyViewModel viewModel)
{
    //Do some validation here perhaps
    MySecondViewModel secondViewModel = new MySecondViewModel{
                        Id = viewModel.Id,
                        // etc. etc.
                };  
return View("Step2", secondViewModel);
}

その後、エンティティをデータベースに永続化する必要があるまで、必要に応じて続行できます。ビューがそのViewModelに強く型付けされている限り、モデルを引数として投稿するためにフォームで特別なことをする必要はないので注意してください。

于 2012-06-26T09:34:07.147 に答える