當JavaScript與ASP.NET結合,一些神奇的事件就發生了.
垃圾玩意,上傳個圖片都上傳不了,........我用文字敘述吧!
【需求】
一個html文字框(用戶端控制項),一個Button(伺服器端控制項),引發的四個多小時的故事....
我要在按下Button時,判斷文字框是否輸入了內容,如果內容為空白,執行一個提示必須輸入內容的動作,否則,執行相應事件.
【過程】
既然我們知道了javascript的好,那當然要用一下它了,先寫指令碼
username:文字框的name
loginstatwrong:是一個要顯示必須輸入內容的<li></li>的 id,可以不用管它.
function isUserNameNull()
{
if(document.all("username").value=="")
{
document.getElementById("loginstatwrong").innerHTML="使用者名稱不可為空!";
document.getElementById("loginstatwrong").style.display="block";
return false;
}
else
{
formGetPWD.action="getPWD.aspx?username="+document.all("username").value;
formGetPWD.submit();
}
}
【問題】
那麼我現在要在Html裡給Button加入 onclick=isUserNameNull()事件,
同時,又要為Button在後置代碼CodeBehind裡加上按鈕單擊事件,那麼
無論文字框有無內容,CodeBehind裡的事件都要執行.,,,
我怎麼實現當文字框內無內容時,單擊Button只在用戶端用javascript處理,而當文字框不為空白時,就把文字框的內容上傳到伺服器上進行處理呢?
【解決問題】
問同事,研究出兩個可行方案:①把Button變為用戶端控制項,然後在Page_Load裡通過傳遞來的參數進行判斷處理.
有點複雜,但還是發揮了javascript的優勢,不理想.
②把文字框轉化為伺服器端控制項,加個不可為空的驗證控制項就OK了,靠,這個還用說,菜鳥都知道.
上網查資料:搜了老半天也沒有這方面的東西,難道大家都沒有這個問題?還是大家都不屑於這個問題
伺服器控制項的JavaScript事件處理與其後置代碼的同時存在時的處理(這個是我想用的本文的另一個標題)
既然不行,還是問問我的Boss吧,真不是蓋的,Boss就是boss,三言兩語就把我打發了
Boss曰:在後置代碼裡讓Button調用javascript不就行了.(後置代碼裡呼叫指令碼?還可以這樣??菜鳥又漲見識了)還熱心的幫我寫了這行代碼:
this.Submit1.Attributes.Add("onclick","isUserNameNull();");
注意:他回到自己座位上又補充了一句,你最好在後面加個return,我當時沒有在意,哪裡加return也不清楚,這樣我又調試了一個多小時問題還是沒有解決,後來突然我又想到了Boss說的return來,難道另有玄機?????
找來個貓:this.Button1.Attributes.Add("onclick","return confirm('你確定要刪除嗎?')");
畫只虎:this.Submit1.Attributes.Add("onclick","return isUserNameNull();");
---------困擾心頭多時的問題解決了!!!!!!!!!!!!
【總結】
①Boss的話每一句都是金玉良言,落掉一句都不行!!
晚了,明天待續....
②return 表示只有在執行formGetPWD.submit(); 後才與伺服器進行互動,不寫return的話,執行完指令碼後肯定會與伺服器互動.
③原來指令碼還可以被後置代碼調用.下面就是調用的isUserNameNull()方法.
Submit1.Attributes.Add("onclick","return isUserNameNull();");
④通過研究這個問題,我進行了多次跟蹤,更進一步的清楚了網頁調用的詳細過程.
⑤要不擇手段的請教別人,不要怕被笑話菜.