如何在验证失败后阻止页面跳转到顶部位置?

Sla*_*uma 24 asp.net validation validationsummary

我有一个简单的aspx页面,其中包含一些TextBox和一个提交按钮.某些字段是必需的,按钮下方是ValidationSummary.完整的表单大于屏幕高度,因此必须向下滚动才能到达提交按钮.如果我没有填写所有必填字段并单击提交验证按预期失败,验证摘要会在按钮下方显示一些信息消息.验证发生在客户端上,不会发生回发.

所以这一切都是有希望的.但令人不安的是,当我点击提交按钮时,页面会移动("跳转")到顶部位置.要查看验证摘要,必须再次向下移动页面.

我试图将ShowSummary属性设置为false(这没有多大意义):验证仍然有效(没有回发)但在这种情况下页面不会移动到顶部位置.所以问题似乎取决于渲染验证文本.

有没有办法防止这个页面跳转?

先感谢您!

更新:

我上面描述的行为似乎不依赖于浏览器.我已经在五种不同的浏览器中进行了测试,并且它在各处都是相同的.

Sla*_*uma 32

我在asp.net(http://forums.asp.net/p/1545969/3779312.aspx)上提出了这个问题并得到了两个解决方案的回复.更好的是这个Javascript维护滚动位置:

<script type="text/javascript">
    window.scrollTo = function( x,y ) 
    {
        return true;
    }
</script>
Run Code Online (Sandbox Code Playgroud)

这只是放在页面上无处可去.

另一个解决方案类似于RioTera的提议(使用MaintainScrollPositionOnPostBack),但增加EnableClientScript="false"了Validators以强制回发.它也有效,但价格是人为的回发.


rio*_*era 23

您可以使用Page属性MaintainScrollPositionOnPostBack:

在代码隐藏中:

Page.MaintainScrollPositionOnPostBack = true;
Run Code Online (Sandbox Code Playgroud)

或者在你的网络表格中:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %>
Run Code Online (Sandbox Code Playgroud)


小智 6

尝试设置页面焦点Page.SetFocus(control); 我有一个插入按钮,它为我的gridview添加了一个额外的行,这是一个页面上的许多项目之一,所以我可以添加Page.SetFocus(control)为我的btnInsert_Click事件中的最后一个方法.