2012-07-13 93 views
1

我有一个asp.net web窗体与几个文本框,按钮和其他控件。其中一个按钮应该触发某些文本框中的内容验证。这工作正常,除了如果验证失败,页面的所有后续回发被阻止。修复无效值会消除错误消息,但回发仍然不会发生。为什么验证失败会阻止其他验证组中的控件回发?

验证发生在AJAX UpdatePanel中。我不确定这件事是否重要。

回答

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一个DropDownList,有这个检查:

function ValidatorCommonOnSubmit() { 
    .... 
    var result = !Page_BlockSubmit; /* read the value */ 
    .... 
    Page_BlockSubmit = false; /* reset it */ 
    return result; 
} 

这将阻止第一个tim e,但是然后清除标志,所以下次回发尝试应该工作。

的解决方法,在我的情况下,对于DropDownListOnSelectedIndexChanged事件,是有一个片段添加到其客户端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> 

你可能有把该片断到脱身onchange本身。

+1

这正是我需要解决我今天的问题,谢谢! – Mike 2016-06-15 14:27:47

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" /> 
+0

抱歉,我的初始描述不全面。我不想将所有标记或代码放在后面,因为它非常大。我已经更新了我的问题,基于我一直在做的更多故障排除。感谢您的回应。 – SPKoder 2012-07-13 17:46:33

+0

即使使用updatepanel,我也没有看到这种行为。确认验证失败后页面上没有JS错误 – AspNetDev 2012-07-13 18:15:21

+0

不是;没有脚本错误。我想在页面上的其他东西必须搞乱验证/回发脚本?让我们来看看我能不能找出什么...... – SPKoder 2012-07-13 19:27:55

0

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