这是我正在尝试做的事情:
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(ContactModel model)
{
if (ModelState.IsValid)
{
// Send email using Model information.
return RedirectToAction("Gracias", model);
}
return View(model);
}
public ActionResult Gracias(ContactModel model)
{
return View(model);
}
所有三种操作方法都在同一个控制器中。基本上,用户在联系表单中键入一些数据,我想使用他们在Model对象中的名称将它们重定向到感谢页面。
代码是,它可以工作,但URL与GET变量一起传递。不理想。
http://localhost:7807/Contacto/Gracias?Nombre=Sergio&Apellidos=Tapia&Correo=opiasdf&Telefono=oinqwef&Direccion=oinqef&Pais=oinqwef&Mensaje=oinqwef
有什么建议吗?
答案 0 :(得分:28)
听起来像是TempData的解决方案!
[HttpPost]
public ActionResult Index(ContactModel model)
{
if (ModelState.IsValid)
{
// Send email using Model information.
TempData["model"] = model;
return RedirectToAction("Gracias");
}
return View(model);
}
public ActionResult Gracias()
{
ContactModel model = (ContactModel)TempData["model"];
return View(model);
}
答案 1 :(得分:0)
而不是做
return RedirectToAction("Gracias", model);
你可以做到
[HttpPost]
public ActionResult Index(ContactModel model)
{
if (ModelState.IsValid)
{
// Send email using Model information.
return View("Gracias", model);
}
return View(model);
}
并删除您的Gracias控制器操作。使用上面的“Gracias”视图将与您的ContactModel模型一起显示。
如果它使用相同的模型并且是工作流ex的锁定步骤部分,我认为不需要单独的控制器操作。 “成功发布到索引将始终导致显示Gracias视图”
您还可以将模型存储在TempData中(这类似于1个请求会话状态)但我认为在您的情况下没有任何意义,因为它只会使事情复杂化
思想?
答案 2 :(得分:-1)
快速回答是不要传递整个模型,而是可以使用一些标识符从存储库中检索模型:
[HttpPost]
public ActionResult Index(ContactModel model)
{
if (ModelState.IsValid)
{
// Send email using Model information.
return RedirectToAction("Gracias", model.ID);
}
return View(model);
}
public ActionResult Gracias(int contactID)
{
ContactModel model = new ContractRepository().GetContact(contactID);
return View(model);
}
答案 3 :(得分:-1)
如果没有重定向,这是否可以轻松完成?
这就是我所拥有的:
[HttpGet]
public ActionResult Contact()
{
return View();
}
[HttpPost]
public ActionResult Contact(EmailResponse response)
{
if(ModelState.IsValid){
return View("Thanks", response);
}
else
{
return View();
}
}
"Thanks"
视图强类型为EmailResponse