2016-02-23 32 views
2

這裏是我的一個簡單的代碼版本:ASP.Net文本OnTextChanged射擊,即使確認爲無效

<asp:TextBox ID="textBox" runat="server" AutoPostBack="true" OnTextChanged="textChanged" CausesValidation="true" ValidationGroup="valGroup"></asp:TextBox> 
<asp:RegularExpressionValidator ID="regEx" runat="server" ControlToValidate="textBox" ValidationGroup="valGroup" ErrorMessage="Not a valid number." Display="Dynamic" ValidationExpression="(^0*[1-9]+\d*(\.\d+)?$)|(^0*\.0*[1-9]+\d*$)" /> 

<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSaveClick" ValidationGroup="valGroup" /> 

<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClick="btnCancelClick" CausesValidation="false" /> 

這與該是應該限制輸入一個正則表達式驗證文本框是唯一正實數。當文本更改並通過驗證時,將調用textChanged()函數。

如果文本無效,textChanged()不會觸發,並且保存按鈕也不起作用。

這可按預期工作。

我也有一個取消按鈕,它應該只是清除文本框(和一些其他的東西服務器端)。它應該能夠回發到服務器,不管文本框是否有效,因此CausesValidation="false"標籤。

我的問題是,當我在文本框中輸入無效的東西,然後單擊取消它實際上執行textChanged()之前btnCancelClick()。儘管它是無效的。

這是一個很大的問題,因爲textChanged()使用文本框作爲數字,所以頁面會引發異常。

我不知道是什麼原因導致textChanged()被調用。首先,取消按鈕甚至不會調用該函數。正則表達式驗證程序應該防止文本框調用它。

編輯:我試過做一些改變和試驗。

function cancel() 
{ 

    document.getElementById('<%=textBox.ClientID%>').value = ""; 

} 

<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClientClick="cancel()" CausesValidation="false" /> 

我切換取消按鈕來調用JavaScript方法來嘗試清除該文本框。結果很有趣。

當輸入無效字符串作爲第一件事時,取消按鈕正常工作。它將清除文本框而不調用textChanged()

如果我輸入一個有效的號碼,textChanged()被稱爲我所期望的。但是當我點擊取消按鈕時,它會調用cancel(),之後立即再次調用textChanged(),但現在文本框爲空,導致出現異常。

如果我輸入一些有效的東西,然後使其無效,會發生類似的事情。爲有效輸入調用textChanged()。當添加不正確的輸入時,驗證程序會阻止調用textChanged()。但是當我點擊取消時,它從cancel()textChanged()

我在想,也許這是因爲驗證不通過回發持續,但隨着JavaScript函數cancel()按鈕不能導致頁面回發。 textChanged()必須是造成它的原因,但我不知道如何。

編輯2:我不打算標記這個解決方案,因爲它仍然是一個巨大的問題在我看來,但我找到了一個解決方法。

<script> 

    function cancel() { 

     document.getElementById('<%=textBox.ClientID%>').value = ""; 
     return false; 

    } 

</script> 

<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClientClick="return cancel();" CausesValidation="false" /> 

這不允許按鈕在任何情況下導致回發。它正在修復不應該在那裏的東西,但它在那裏。

這有助於按鈕點擊,但不能與其他東西。我有一個帶有OnSelectedIndexChanged函數服務器端的GridView。它還會使頁面回到textChanged()函數。我可以嘗試創建一個JavaScript版本的GridView函數並像取消按鈕那樣修復它,但是在這個階段,我可能會刪除OnTextChanged事件處理函數,並將該函數放在一個按鈕後面。

回答

0

add causesvalidation =「true」適用於我在文本框控件上。

+0

對不起,但如果你看看我的示例代碼,我已經在文本框上有causevalidation =「true」。我剛剛運行它,它仍然不起作用。 – G3n0c1de

0

如此接近......所需要的僅僅是在取消按鈕上設置專用名稱ValidationGroup名稱。這將導致它在剩下的驗證過程中被循環處理。如果沒有有效地設置它,就會將其置於「默認」驗證組中,其行爲(如您所見)有點奇怪。

要允許取消按鈕免除表格驗證的其餘部分,我通常應用的規則是[ValidationGroupName]Cancel,以確保它在該驗證塊之外被觸發。在這種情況下,將取消按鈕設置爲類似;

<asp:Button ID="btnCancel" runat="server" Text="Cancel" ValidationGroup="valGroupCancel" OnClick="btnCancelClick" /> 

應該給你預期的行爲。

相關問題