这一定是以前问过的,但是几个小时的搜索没有产生任何远程接近的结果。
在我的布局页面(不是典型视图)的页脚中,我有一个“订阅我们的时事通讯”表单。这意味着该表单会针对我网站中的每个视图显示。我正在努力实现以下目标:
- 用户在表单中提交他们的详细信息
- 如果成功,他们将被重定向到“谢谢”页面(已完成)
- 如果有错误,它们会被重定向回来,错误会显示在表单中
但是,第 3 项很棘手,因为它们被重定向回的位置取决于它们最初所在的 URL(控制器/操作)。
我找到的最接近的解决方案是重定向回Request.UrlReferrer
,但这是一个重定向,因此会丢失 ModelState!
到目前为止,我的代码是:
public class ContactController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Subscribe(Models.Subscribe subscribe)
{
if (!ModelState.IsValid)
{
return View( /* Dynamically return the user to their PREVIOUS location with the invalid ModelState object */, subscribe);
}
else
{
// Removed for brevity - Capture email
return View("Subscribed"); // Thank you view (working)
}
}
}
更新以下评论
简单地将模型传回无效的 ModelState 会导致错误:
未找到“订阅”视图或其主视图,或者没有视图引擎支持搜索的位置。
这是意料之中的,因为用户不在“订阅”视图上,因为表单在布局页面内!