首先給一個建議:除非是很明確的服務器代碼錯誤,否則其它的所有的錯誤要看一下HTML源碼,發現很多人沒有這個習慣, 瀏覽器執行的是HTML源碼,因此客戶端任何情況,都可以在HTML源碼中得到反映。
這個問題很明顯是驗証失效,無非是在兩個地方,提交按鈕的onclick事件與Form的onsubmit,看源碼:
頁面中本來有一個Form1_onsubmit要驗証,又加上驗証控制的驗証:
<input type="image" name="ImageButton_Save" οnclick="return Form1_submit(); if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); "
注意這裡的return Form1_sumbit();是在服務器端中的代碼中通過這句加上的,原因是不能直接在aspx頁面中寫onclick事件(會被認作服務器事件)
this.ImageButton_Save.Attributes.Add("onclick","return Form1_onsubmit();");
初步判斷是這兩個驗証方法沖突,即隻要滿足第一個判斷,第二個就不管用了,是判斷順序有問題。
因此如果這裡把Form1_submit()放到後面是否就好了呢,嘗試將服務端的代碼改能如下:
this.ImageButton_Save.Attributes["onclick"] += "return Form1_onsubmit();");
仍不管用,看來驗証控制的代碼是後來加上去的。
最後考慮到驗証的另外一個地方:Form的onsubmit事件,查看HTML源碼如下:
οnsubmit="if (!ValidatorOnSubmit()) return false;"
同樣加上了驗証控制生成的代碼
不過這裡可以在aspx頁面中直接將onsubmit寫上:
<form language="javascript" id="Form1" οnsubmit="return Form1_onsubmit();" method="post" runat="server">
然後最終生成的HTML源碼變成:
nsubmit="if (!ValidatorOnSubmit()) return false;return Form1_onsubmit();"
怎麼樣,我們自己加的Form1_onsubmit已經跑到後面了
再試一下效果,已經OK了。