2011-03-28 25 views
1

我有ASP.Net驗證器的自定義控件。如何在回發之前進行驗證?

writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "javascript:return DoSmth();"); 

function DoSmth() { 
var cBox = confirm("Are you sure?"); 
if (!cBox) { 
    return false; 
} 
else { 
//Invoke validation 
} 

當我按下按鈕提交,我打電話確認框。如果我按取消 - 好吧。但如果我按OK,我需要進行驗證。我怎樣才能停止回傳並執行調用?

+0

聽起來像你需要使用JavaScript做客戶端驗證。 – 2011-03-28 21:17:15

+0

'javascript:'不會被事件處理程序使用。他們總是使用JavaScript。實際上,它只是起作用,因爲它定義了一個標籤。如果JavaScript沒有標籤,它將是一個語法錯誤。 – ThiefMaster 2011-03-28 21:23:24

回答

5

致電客戶端Page_ClientValidate(validationGroup)。如果頁面有效,它將返回true

function DoSmth() { 
    var cBox = confirm("Are you sure?"); 
    if (!cBox) { 
     return false; 
    } 
    else { 
     return Page_ClientValidate(validationGroup); 
    } 
} 

EDIT(回答評論):

validationGroup這裏是一個字符串變量,它是沒有必要將它傳遞給DoSmth功能(老實說,回答應該是:它取決於)。

如果在.js文件中定義了該函數,那麼應該將validationGroup作爲參數傳遞。

如果它是頁面/控件的一部分,它會更容易使用,例如,服務器端結構在這裏:

return Page_ClientValidate('<%= btnSubmit.ValidationGroup %>'); 

其中btnSubmit是一個按鈕,導致驗證,或只使用一個字符串變量。

+0

在這種情況下,您應該將自定義控件的AddAttributes代碼中的validationgroup傳遞給DoSmth方法。 – gbs 2011-03-28 23:38:59

+0

@gbs,爲我的回答添加了解釋 – Alex 2011-03-29 08:30:02

0

我不確定您是否可以停止使用ASP.Net驗證回發。從MSDN:

「驗證 頁面初始化後發生(即,後視圖 狀態和回發數據已 處理),但任何改變或 點擊調用事件處理程序之前。」

我使用jQuery Validation,然後用與確認對話框相同的方法檢查值。

function DoSmth() { 

$('#form1').validate({ 
       rules: { field: "required" } 
      }); 


var cBox = confirm("Are you shure?"); 
if (cBox && $('#form1').valid()) { 
    //form is valid 
} 
else { 
    return false; 
} 
相關問題