У меня есть приложение 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);
}