0

私は次の行動を起こします

[GET("Foo")]
public virtual ActionResult Foo()
{
    return View(new FooViewModel());
}

このアクションのビューは、この部分ビューを呼び出します

@{ Html.RenderAction(MVC.FooBar.AddFoo()); }

コントローラーアクション付き

[ChildActionOnly]
[GET("Foo/Add")]
public virtual ActionResult AddFoo()
{
    var viewModel = new AddFooViewModel();

    return PartialView(viewModel);
}

[POST("Foo/Add")]
public virtual ActionResult AddFooPost(AddFooViewModel viewModel)
{
    // If ModelState is invalid, how do I redirect back to /Foo 
    // with the AddFooViewModel ModelState intact??
    if (!ModelState.IsValid)
        return MVC.FooBar.Foo();

    // ... persist changes and redirect
    return RedirectToAction(MVC.FooBar.Foo());
}

誰かがModelStateエラーを含むAddFooフォームを送信した場合、POSTアクションを/ Fooにリダイレクトして、ModelStateエラーを含むAddFoo部分ビューを表示する必要があります。これを処理するための最良のアプローチは何ですか?

4

2 に答える 2

0

私はあなたが2つの方法でそれを達成できると思います:

  1. セッション状態の使用
  2. クエリ文字列パラメータを使用してデータを渡す

私は2番目のオプションを好みます。

于 2011-10-26T18:37:08.887 に答える
0

コントローラーの属性を使用して、ビューモデルをTempDataこのように配置することになりましたModelStateToTempData

[ChildActionOnly]
[GET("Foo/Add")]
public virtual ActionResult AddFoo()
{
    var viewModel = TempData["AddFooViewModel"] as AddFooViewModel ?? new AddFooViewModel();

    return PartialView(viewModel);
}

[POST("Foo/Add")]
public virtual ActionResult AddFooPost(AddFooViewModel viewModel)
{
    // If ModelState is invalid, how do I redirect back to /Foo 
    // with the AddFooViewModel ModelState intact??
    if (!ModelState.IsValid)
    {
        TempData["AddFooViewModel"] = viewModel;
        return RedirectToAction(MVC.FooBar.Foo());
    }

    // ... persist changes and redirect
    return RedirectToAction(MVC.FooBar.Foo());
}
于 2011-10-26T20:00:51.570 に答える