这是一个很好的问题,而且真的很棘手。但我设法得到一个版本,你可以尝试和可能建立。
MaintainScrollPositionOnPostback =“true”-setting在表单提交和窗口加载上设置一系列javascript事件,这些按照您所说的“覆盖”验证器设置的焦点进行。
所以我所做的就是添加一个共同的CSS类的所有验证,像这样:
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" CssClass="error" ErrorMessage="RequiredFieldValidator" SetFocusOnError="true"
EnableClientScript="false" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
然后我又增加了事件侦听到window.load(注意,我们也需要留下一个天冬氨酸。净增加了,所以我们不能做windows.load =功能...):
<script>
window.addEventListener("load", function() {
var el = document.getElementsByClassName("error");
if (el.length > 0) {
window.location.hash = "#" + el[0].id;
}
});
</script>
在这里,你可以从jQuery的使用中受益,能够支持更多的浏览器,但的addEventListener是pretty well supported。
脚本搜索errormessage,并通过它的id与锚点关注。 Javascript有focus-method,但它是用于表单元素的,所以这就是为什么这个解决方法。
希望这会有所帮助!
非常感谢您的回复!我只是试过这个,它确实认可了验证失败的控件的数量。但是,'window.location.hash =“#”+ el [0] .id;'似乎没有做任何事情。我不确定这是为什么。我将继续测试并更新 – mtNewToJava
嗯,它可能是加载事件的顺序,请尝试将此脚本放在body-element的最底部。 – Esko
是的,解决了这个问题!必须把脚本作为页面上的最后一件事!我猜测另一种可能的解决方案是使用更新面板,而不是进行完整的Postback,并且将maintainScrollPositionOnPostBack =“false”,如果我有一些时间,可能会尝试这么晚。非常感谢您的帮助。 – mtNewToJava