У меня есть приложение ASP.NET MVC 3 с общим сценарием, где есть контроллер «About
» с использованием действий «Contact
» и «ThankYou
». Я хочу, чтобы пользователь перешел на /about/contact
, заполните форму, отправьте ее и отправьте ее на страницу /about/contact/thankyou
*, где будет отображаться содержимое формы (aka view model).Как использовать RedirectToAction при передаче модели просмотра на другой маршрут
** Примечание нет «Контакт» контроллера я не хочу, чтобы создать для этой цели, если это возможно. *
Я использую 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);
}
это приводит к тому, что все ссылки на сайте, указывающие на '/ about/contact', будут переписаны на' /about/contact/contact'...I сделало редактирование в примере кода, чтобы переименовать ContactUs в действие Contact ... – zam6ak
Я изменил ваш подход и заставил его работать. Маршрут должен быть 'about/contact/thankyou', а в последней строке должно быть указано' new {controller = "About", action = "ThankYou"} 'Я думаю, вы заслуживаете кредита за то, что дали мне эту идею, но можете ли вы обновить ответ так что я могу отметить это? – zam6ak
@ zam6ak, ответ обновлен. –