私は今MVC3を学んでいますが、これは本当に混乱しています。
ViewModel
いくつかの子 ViewModel を含む があります。各 ChildViewModel は異なる部分ビューでレンダリングされ、送信時にコントローラーで異なるアクションを実行します。すべての ChildViewModels は、データに対して何らかのカスタム検証を実行する必要があり、成功した場合は次のページに移動する必要があります。検証が失敗した場合は、単純に に戻ってParentView
エラーを表示する必要があります。
[HandleError]
public class MyController: Controller
{
public ActionResult Index()
{
var viewModel = new ParentViewModel();
return View("ParentView", viewModel);
}
[HttpPost]
public ActionResult ChildViewModelB_Action(ChildViewModelB viewModel)
{
if (ModelState.IsValid)
{
return View("ChildViewModelB_Page2", viewModel);
}
else
{
// I'm having trouble returning to the ParentView and
// simply displaying the ChildViewModel's errors, however
// discovered that creating a new copy of the VM and displaying
// the ParentView again shows the existing data and any errors
// But why??
var vm = new ParentViewModel();
return View("ParentView", vm);
}
}
}
例えば、
- ページには 3 つのオプションが読み込まれます。
- ユーザーはオプション B を選択し、フォームに入力します。
- 送信時に、子 ViewModel B が検証されて失敗します。
- ChildB がすべて入力された状態で、ページが ParentView に戻りますが、ChildB エラーも表示されるようになりました。
元のデータと同じデータでParentViewModel
ディスプレイの新しいコピーを作成するのはなぜですか?ParentView
ParentViewModel
ParentView
また、サーバー側の検証を行った後に戻る必要がある別の方法はありますか?