我有一个ASP.NET MVC 3应用程序,其常见情况是“About
”控制器使用“Contact
”和“ThankYou
”操作。
我希望用户转到/about/contact
,填写表单,提交表单,然后转到/about/contact/thankyou
*页面,其中将显示表单内容(也称为视图模型)。
**注意没有“联系”控制器,如果可能,我也不想为此目的创建一个。*
我正在使用RedirectToAction
来阻止重新提交(Post/Redirect/Get模式)和TempData
传递视图模型以感谢您页面。
我还可以使用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);
}
答案 0 :(得分:0)
您可以在默认路线之前定义自定义路线:
routes.MapRoute(
"contact",
"about/contact/thankyou",
new { controller = "About", action = "ThankYou" }
);
现在,当您导航到/about/contact
时,Contact
GET操作将被执行(您必须在代码中将其重命名为ContactUs
)。然后,用户填写表单并提交Contact
POST操作。网址暂时保持不变:/about/contact
。重定向后,执行ThankYou操作,并且网址更改为/about/contact/thankyou
。