2009-10-06 40 views
3

我在附有TextChanged事件的aspx頁面中有一個文本框。 我也有一個驗證器附加到文本框。在TextChanged上停止回發

當文本被改變時,驗證觸發器,但是如果有錯誤,textchanged事件仍然被調用。你知道如果驗證器觸發時是否可以停止textback上的回發?

<asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged"></asp:TextBox> 
<asp:RequiredFieldValidator ID="reqQuantity" ControlToValidate="txtQuantity" runat="server" ErrorMessage="The quantity is mandatory."></asp:RequiredFieldValidator> 

回答

3

您可以將驗證移動到客戶端添加EnableClientScript="true"屬性。回發不會發生,因爲檢查將使用JS執行。

除此之外,您可以檢查執行TextChanged事件的回調函數時頁面是否有效,以便定義函數是否可以繼續。您應該將ValidationGroup屬性添加到驗證程序,並在檢查Page.IsValid之前調用Page.Validate函數指定該組。

UPD

這裏的尖端。

添加您自己的JS功能,如:

function IsValid(args) { 
     if(args.value.length == 0) { 
      return false; 
     } 
     else { 
      return true; 
     } 
    } 

Page_Load事件添加以下代碼:

txtQuantity.Attributes[ "onchange" ] = "if (IsValid(this) == false) return;"; 

這不會弄亂自動回發時輸入是正確的,但將阻止回發除此以外。

+3

的EnableClientScript屬性不避回發... – Dante 2009-10-06 09:39:56

+0

更新答案用簡單的解決方案... – terR0Q 2009-10-06 10:33:55

+0

你是正確的,我想這一點。事情是我有一個RangeValidator需要一個最小值和最大值,我有問題發送這兩個值到IsValid函數。但你的想法很有效。 因爲這個原因,我會接受你的答案,雖然問題沒有解決。 – Dante 2009-10-06 10:37:06

0

嘗試改變的AutoPostBack =「真」之後爲的AutoPostBack =「假」 ..

+0

然後我的TextChanged事件如何回發呢? :s – Dante 2009-10-06 09:52:07

+1

爲什麼你想回發textchanged事件..有業務邏輯附加它? – 2009-10-07 05:40:06

0

只是共享一個內聯,較短的版本公認的答案的:

<asp:TextBox ID="txtQuantity" runat="server" 
    AutoPostBack="true" ontextchanged="txtQuantity_TextChanged" 
    onchange="if (this.value.length == 0) return;"></asp:TextBox> 

有一個同樣的問題RequiredFieldValidator,上面的工作對我來說。

已知嘮叨:設計師抱怨說「onchange」不是有效的服務器端屬性。

3

爲文本框添加CausesValidation="true",它會很好。如果驗證無效,則不會有任何回傳。

<asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged" CausesValidation="true"></asp:TextBox> 

+0

是的,但是這樣可以避免回發,並且我希望AutoPostback =「true」,因此它可以驗證程序中其他邏輯的文本框內的數據。 – Fandango68 2016-02-17 06:22:54