为什么验证失败会阻止其他验证组中的控制回发?

时间:2012-07-13 17:10:48

标签: asp.net validation webforms postback

我有一个带有几个文本框,按钮和其他控件的asp.net Web表单。其中一个按钮应该触发某些文本框中内容的验证。这样可以正常工作,但如果验证失败,则会阻止页面的所有后续回发。修复无效值可以消除错误消息,但仍然不会发生回发。

验证在AJAX UpdatePanel中进行。我不确定这是否重要。

3 个答案:

答案 0 :(得分:9)

我很高兴the workaround对你来说没问题,但是为了让其他人登陆此页面,禁用客户端验证远非可接受的解决方案。所以这里:

为什么它只在UpdatePanel出现时才发生,但我仍然不清楚:

正如其他人所提到的,您遇到的问题很可能是因为不成功的验证尝试阻止了进一步的回发。

另请参阅:Why won't my form post back after validation?

有一个名为Page_BlockSubmit的变量,当客户端验证失败时,该变量设置为true:

function Page_ClientValidate(validationGroup) {
    ....
    Page_BlockSubmit = !Page_IsValid;
    return Page_IsValid;
}

因此当__doPostBack作为OnSelectedIndexChanged的{​​{1}}的一部分发生时,会有以下检查:

DropDownList

第一次阻止,但随后清除该标志,因此下一次回发尝试应该有效。

对于function ValidatorCommonOnSubmit() { .... var result = !Page_BlockSubmit; /* read the value */ .... Page_BlockSubmit = false; /* reset it */ return result; } DropDownList事件,在我的情况下,解决方法是将一个代码段添加到其客户端OnSelectedIndexChanged事件中:

onchange

您可以放弃将该代码段放入<asp:DropDownList runat="server" ID="SomeDropDownList" OnSelectedIndexChanged="AlwaysDoSomething" onchange="resetValidationState(this);"> .... </asp:DropDownList> <script type="text/javascript"> function resetValidationState() { // clear any postback blocks, which occur after validation fails: window.Page_BlockSubmit = false; } </script> 本身。

答案 1 :(得分:2)

  

除了单击此按钮后,除非更正了验证错误,否则没有其他按钮可以导致回发。因此,btnDelete,不应该要求验证文本框,在文本框值更正之前无法回发

请勿使用以下代码查看该行为。

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1" ValidationGroup="pc">
</asp:RequiredFieldValidator>
<asp:Button runat="server" ID="btnSubmit" Text="Submit"  Width="150" CausesValidation="true" ValidationGroup="pc" />
<asp:Button runat="server" ID="btnDelete" Text="Delete" CausesValidation="false"  />

答案 2 :(得分:0)

我可能完全不在这里 - 但我想我看到了问题。 (我主要使用devexpress控件,所以规则可能有点不同)。验证失败时,整个页面将设置为无效,因此不会发生回发。可以是因为删除按钮没有导致任何验证,在这些编辑器被更改为有效之后它没有重新验证吗?