2010-10-25 13 views
2

我有一個ASP的ASP頁面與ASP驗證(必填字段,正則表達式,...)加上Java腳本函數進行額外的驗證(例如,檢查是否第二個日期大於第一次約會等)。ASP CustomValidator,錯誤後推進回發

我通常做的:

<script type="text/javascript"> 

    function validate() { 
     // ... 
     alert('Not valid!'); 
     return false; 
    }  
</script> 


<asp:Button ID="Button1" runat="server" Text="Add" 
      OnClientClick="return validate();" OnClick="Button1_Click" /> 

因此,按鈕前進到回傳如果ASP和JavaScript驗證都通,並能正常工作。

我想出來的自定義的驗證:

<asp:CustomValidator ID="CustomValidator1" 
EnableClientScript="true" runat="server" ControlToValidate="TextBox1" 
ClientValidationFunction="validate();" > 
</asp:CustomValidator> 

(也試圖與ClientValidationFunction = 「返回的validate();」)

但頁面不斷地推進到回傳,即使在顯示「無效」警報......任何想法?謝謝!

+0

嘗試重命名驗證()到別的東西? – IrishChieftain 2010-10-25 16:53:14

+0

嘗試validate2()...不工作;/ – naruu 2010-10-25 17:03:31

回答

2

當使用CustomValidator時,客戶端驗證功能需要接受參數參數。然後,要將驗證標記爲失敗,請將arguments.IsValid設置爲false。這裏是MSDN page for the CustomValidator

function validate(source, arguments) { 
    // ... 

    alert('Not valid!'); 
    arguments.IsValid=false; 
} 
+0

打我:) – cwap 2010-10-25 17:24:41

+1

你通常不會在驗證函數中使用'alert' - 這就是'Text'或'ErrorMessage'屬性是什麼對於。 – lincolnk 2010-10-25 18:21:26

+1

@lincolnk - 確實。我只是複製問題中的示例並修改它以顯示如何將驗證設置爲失敗狀態。 – 2010-10-25 19:09:35

0

像@Jason寫道,當使用CustomValidator客戶端是除源和參數params。 一個使用CustomValidator的客戶端和服務器端的快速示例。

的CustomValidator使用ClientValidationFunctionOnServerValidate屬性:

<asp:CustomValidator ID="cvCreditCard" runat="server" ErrorMessage="Error Message" ControlToValidate="txtCardNumber" ClientValidationFunction="Validators.CardNumber" OnServerValidate="ValidateCreditCardValid">*</asp:CustomValidator> 

客戶端驗證:

var Validators = { 
CardNumber: function (source, clientside_arguments) { 

    var valid_val = true; 
    var txtCardNumber = clientside_arguments.Value; //(return the ControlToValidate value) 

    //make your checks here 

    clientside_arguments.IsValid = valid_val; 
}} 

服務器端驗證:

protected void ValidateCreditCardValid(object sender, ServerValidateEventArgs e) 
    { 
     //make your checks here    
     e.IsValid = false; 

    } 
0

我通過創建一個變量解決了這個問題:

Boolean fieldIsValid = true; 

,並在自定義的驗證方法,表達我會改變的值,如果參數是不正確的:

if(args.IsValid == false) 
      { 
       fieldIsValid = false; 
      } 
      else 
      { 
       fieldIsValid = true; 
      } 

然後,我也把在提交點擊方法:

protected void submit_Click(object sender, EventArgs e) 
     { 
      if (fieldIsValid) 
      { 
       //submit my things 
      } 
     }