【问题标题】:Return to same view after form submit in ASP.NET MVC 5在 ASP.NET MVC 5 中提交表单后返回相同的视图
【发布时间】:2020-04-27 12:02:10
【问题描述】:

我创建了一个联系表格。在此联系表格中,用户可以输入名字、姓氏、电话号码等数据。用户提交表单后,我执行服务器端验证。如果验证成功和不成功,我想将用户重定向回相同的视图。这没有问题。但是视图的滚动位置又在顶部。但是表格在最底部。用户应该直接再次显示表单。换句话说:我想将相同的视图返回给用户,但保持滚动位置。如何在 ASP.NET MVC 5 中实现这一点?

我的服务器端代码如下所示:

public ActionResult Contact(ServiceModel model)
        {
            if (ModelState.IsValid)
            {
                ViewBag.SuccessMessage = " succeeded";
                return View("Index");
            }
            else
            {
                if (!this.IsCaptchaValid(""))
                {
                    ViewBag.ErrorMessage = "Error. Try again.";
                }
                return View("Index", model);
            }
        }

谢谢。

【问题讨论】:

  • 不错。对我来说很好。但是我也可以以某种方式在 RedirectResult 函数中传递模型吗?因为我需要进行验证。如果验证出错,我需要模型发布验证错误消息。
  • 那么使用常规的return View("Index", model)this SO answer 可能是最简单的,这需要向ViewBag 添加一个属性并从JS 中引用它。

标签: c# asp.net-mvc contact-form


【解决方案1】:

感谢 Natha Miller 的帮助。 解决方案: 在 ViewBag 中,您必须输入要跳回的部分。例如,这可以是控制器中的以下指令:

ViewBag.Section = "mySection"; //This refers to the element in the .cshtml page that has the ID 'mySection'.

如果设置了 ViewBag 中的 Section 变量,则必须在 JavaScript 中签入 .cshtml 文件。如果是这种情况,那么您必须跳到某个位置。其工作原理如下:

@if (ViewBag.Section!=null)
{
    <script>
        $(function () {              
                window.location.hash = '#@ViewBag.Section';
        });
    </script>
}

解决方案来自 Stackoverflow 上已经提出的问题。 Here 是它的链接。

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多