ASP.Net验证摘要导致页面跳转到顶部如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我有一个简单的表单,包含几个必需的字段验证器和一个验证摘要控件。当我提交表单时,客户端验证将导致表单跳转到页面顶部。如果我删除验证摘要,页面不会移动。

下面是一个简单的例子:

<asp:TextBox ID="test" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="testrequired" runat="server" ControlToValidate="test">*</asp:RequiredFieldValidator>
<asp:ValidationSummary ID="summary" runat="server" />
<asp:Button ID="submit" runat="server" Text="submit" />

我已经尝试SetFocusOnError="true"在必要的字段验证器中MaintainScrollPositionOnPostback="true"进行设置,并且对于咯咯笑声 - 即使这不是回发 - 没有任何运气。有没有解决这个问题的已知解决方案?

我在WebResource.axd生成的js中发现了这个问题。似乎归结为ValidationSummaryOnSubmit()功能中的一行。

line 534: window.scrollTo(0,0);

任何想法如何删除或绕过此?

暂时快速解决问题:

  • EnableClientScript="false"为所有验证控件设置(禁用客户端验证)
  • MaintainScrollPositionOnPostback="true"在Page指令中设置

仍然希望客户端解决方案...

看起来更好的解决方法是重写该window.scrollTo()函数,以便在验证脚本调用时不执行任何操作:

<script type="text/javascript">
    window.scrollTo = function() { }
</script>

在页面上的任何位置添加上述内容都会使客户端验证完整,但会在window.scrollTo()整个页面中禁用该方法

提问于
用户回答回答于

两种可能的解决方法:

禁用客户端验证并在回发时跳转到正确的位置:

* set EnableClientScript="false" for all validation controls (disabling client validation)
* set MaintainScrollPositionOnPostback="true" in Page directive

在javascript中禁用scrollTo函数:

<script type="text/javascript">
    window.scrollTo = function() { }
</script>
用户回答回答于

这是一个已知的错误,如Microsoft Connect上记录的。在相关的问题有最好的解决办法的基础:

var ValidationSummaryOnSubmitOrig = ValidationSummaryOnSubmit;
var ValidationSummaryOnSubmit = function() {
    var scrollToOrig = window.scrollTo;
    window.scrollTo = function() { };
    var retVal = ValidationSummaryOnSubmitOrig();
    window.scrollTo = scrollToOrig;
    return retVal;
}

扫码关注云+社区