首页 > 解决方案 > 如何从布局页面(不是典型的控制器/视图)中的表单显示 ModelState 验证失败结果?

问题描述

这一定是以前问过的,但是几个小时的搜索没有产生任何远程接近的结果。

在我的布局页面(不是典型视图)的页脚中,我有一个“订阅我们的时事通讯”表单。这意味着该表单会针对我网站中的每个视图显示。我正在努力实现以下目标:

  1. 用户在表单中提交他们的详细信息
  2. 如果成功,他们将被重定向到“谢谢”页面(已完成)
  3. 如果有错误,它们会被重定向回来,错误会显示在表单中

但是,第 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 会导致错误:

未找到“订阅”视图或其主视图,或者没有视图引擎支持搜索的位置。

这是意料之中的,因为用户不在“订阅”视图上,因为表单在布局页面内!

标签: asp.netasp.net-mvcasp.net-mvc-layout

解决方案


推荐阅读