2008年1月16日

UpdatePanel和Validator不太相容的問題

前一陣子遇到UpdatePanel和.Net的Validator不太相容的問題,後來有解掉了,但是忘了記錄下來,所以今天再次遇到的時候,還花了蠻多時間在回想的...真是夠了...
所以趕快把他整理一下摟~~

問題描述:
現在我有兩個按鈕,都擺放在UpdatePanel內,Button1的CausesValidation = True,Button2的CausesValidation = False,那此時我故意讓它驗證不通過,所以我點選按了Button1會出現Client端的錯誤提示訊息,緊接著我馬上按下Button2,發現沒有動作....再點一次...OK了ㄟ?
為什麼要點兩次才會有動作呢?

解決方案:
詳細原因我也不是很清楚,但是我去追蹤了一下ASP.NET的JavaScript Code,發現之所以沒有動作是因為它沒有觸發submit,那為什麼沒有觸發呢?是因為ASP.NET的JavaScript裡面定義了一個變數"Page_BlockSubmit",這個變數是為了要避免同一個事件連續被submit兩次吧?
所以我就在每一個button上面多放了一個Javascript Function來改變這一個值。
下面是我的Code

Function

function __ConfirmToDo(CausesValidation , ValidationGroup)
{
var result = true;
if (CausesValidation == '1')
{
if (typeof(Page_ClientValidate) == 'function')
{
result = Page_ClientValidate(ValidationGroup);
}
}

//Do other validation

if(result == true)
{
Page_BlockSubmit = false;
return true;
}
return false;
}


Button的UseSubmitBehavior屬性設為False

Button的Click事件附加如下

Me.Button2.Attributes.Add("onclick", "javascript:if(__ConfirmToDo('" & iif(Me.Button2.CausesValidation = True , "1","0") & "','" & Me.Button2.ValidationGroup & "') == false){ return false;}")


這樣就萬事OK瞜~~
我想應該是啦?因為還沒有遇到衝突~~啦啦啦~~

沒有留言:

張貼留言