「Contact
」と「ThankYou
」アクションを使用するコントローラ「About
」がある一般的なシナリオを持つASP.NET MVC 3アプリケーションがあります。 /about/contact
に行き、フォームに記入して提出し、/about/contact/thankyou
*ページに移動して、フォームの内容(別名ビューモデル)が表示されるようにします。異なるルートを持つビューにビューモデルを渡しているときにRedirectToActionを使用する方法
**そこには、「連絡先」のコントローラがあることも、私は可能であれば、この目的のために作成したいん。*
私はビューモデルに渡すために再提出(Post/Redirect/Getパターン)とTempData
を防ぐためにRedirectToAction
を使用していますありがとうございました。 また、私は把握できなかった一つのことがある
しかし、(そう、それはウェブ解析では、「目標」として登録しません)フォームページに連絡するページが直接到達したあなたに感謝しているかどうかを確認して戻ってリダイレクトするようにTempData
を使用することができますどのように別のルートを使用して、ありがとうページのように表示されます/about/contact/thankyou
私はこの権利をしていますか? 良い方法がありますか? AboutController
<!-- language: c# -->
[RequireHttps]
public ActionResult Contact()
{
var viewModel = new ContactViewModel();
return View(viewModel);
}
[RequireHttps]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Contact(ContactViewModel viewModel)
{
if (!ModelState.IsValid)
{
return View(viewModel);
}
// not sure if this is the best way or how to redirect to /contact/thankyou
TempData["viewModel"] = viewModel;
return RedirectToAction("ThankYou");
}
[RequireHttps]
public ActionResult ThankYou()
{
var viewModel = TempData["viewModel"];
// upon direct access, viewModel will be null and missing, so redirect to Contact form
if (viewModel == null)
{
return RedirectToAction("Contact");
}
return View(viewModel);
}
これは、 '/ about/contact'を指しているサイトのすべてのリンクを' /about/contact/contact'に書き換えています。コードサンプルを編集してContactUsの名前をContactアクションに変更しました... – zam6ak
私はあなたのアプローチを変更して動作させました。ルートは 'about/contact/thankyou'であり、最後の行は' new {controller = "About"、action = "ThankYou"}です。 '私はアイデアを与えてもらえたと思うけど、私はそれに印を付けることができますか? – zam6ak
@ zam6ak、回答が更新されました。 –