.NET的驗證控制項很好用,對於不太會寫Javascript的人來說可以是一大福音,
加上.NET的網頁架構通常會搭配MasterPage,所以要取得ClientID其實還不算很方便。
但有的時候,如果按鈕想要「在驗證控制項完成後,透過Script呈現某種特效」時,
驗證控制項就似乎不太方便了...
最常見的就是按鈕按下後,會遮蔽整個操作介面避免使用者二次按到按鈕的效果處理。
最常見的應該是這種,按下儲存按鈕後出現遮蔽畫面「處理中...」 (避免使用者二次按下儲存),但會因為驗證控制項的關係造成無法正確判斷是否完全通過驗證控制項,出現上圖的尷尬情況。(就是還有欠缺的條件,但卻出現遮蔽特效)
這篇文章想解決的問題在於「要如何在Client端可以判斷.NET的驗證控制項已經全部通過」
首先,
在Script中加入funcrion Page_ClientValidate_AllPass(名稱可換),
參數validationGroup是.NET驗證控制項對應的群組名稱(string型態)
function Page_ClientValidate_AllPass(validationGroup) {
if (typeof(Page_Validators) == "undefined") { return true; }
var i;
for (i = 0; i < Page_Validators.length; i++)
{
var val = Page_Validators[i];
val.isvalid = true;
if ((typeof(val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup))
{
if (typeof(val.evaluationfunction) == "function")
{
val.isvalid = val.evaluationfunction(val);
}
}
}
ValidatorUpdateIsValid();
return Page_IsValid;
}
後台按鈕事件範例如下,表示通過「Save」的驗證控制項時,會觸發if的{...}事件
this.saveButton.Attributes["onclick"] += "if(Page_ClientValidate_AllPass('Save')) { ... }";
當然還有其他應用的方法,不過我目前使用的程度就是這樣,所以不多提了。
留言列表