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