天天看點

ASP.NET的一些小BUG(不斷更新中)

會Java,也會C#,個人覺得C#在WinForm方面還是很容易使用的,但ASP.NET尤其是Ajax方面的東西,實在是不太敢恭維,個人記錄下一些BUG,以便查閱。

ASP.NET控件:

1、當将TextBox設定為ReadOnly="True"後,若綁定My97DatePicker之類的javascript月曆控件,後置代碼中擷取的值總是其初始值,也就是說,無法改變其值,除非在後置代碼中寫入TextBox.Text="XXXXXX...",不知道是不是所有的javascript代碼指派都不能擷取到。

解決方案:将TextBox換為<input type="text" readonly="readonly" runat="server" />,這樣既可以在伺服器端使用又不會産生ReadOnly無法指派的BUG。

2、當<input type="text" runat="server" />的onclick和onserverclick同時啟用時,若onclick這樣寫return confirm("你确定要删除嗎?"),則不論選擇“确定”還是“取消”,onserverclick都不會執行;相反,如果onclick這樣寫confirm("你确定要删除嗎?"),那不論選擇“确定”還是“取消”,onserverclick都會執行,也就是永遠無法用“确定”和“取消”讓使用者選擇是否執行onserverclick操作。

解決方案一:将<input type="text" runat="server" />換成伺服器控件Button,将onclick事件對應到Button的OnClientClick事件,将onserverclick事件對應到Button的OnClick事件,就可以正常使用。

解決方案二:将<input type="text" runat="server" />換成伺服器控件LinkButton,用戶端的onclick事件照舊,然後設定LinkButton的CommandName,在GridView等資料控件裡面的RowCommand事件裡面根據CommandName執行對應操作,但此法必須在LinkButton處于資料控件中時使用,有局限性,建議采用方案一為主。

3、使用Ajax.dll進行Ajax相關操作時,若标明[AjaxMethod]特性的方法中有關于.aspx檔案中的伺服器控件的引用,則該方法執行到該句就不會繼續執行下去。

解決方案:由于[AjaxMethod]特性的方法隻涉及資料通信,故不要讓其中含有伺服器控件的引用,若需要用到伺服器控件的值,由javascript方法傳入,類似于document.getElementById("<%=伺服器控件ID.ClientID %>").value,同時,設定頁面呈現的代碼完全可由javascript方法完成,[AjaxMethod]特性的方法隻需要完成三件事——接收資料(可選)、處理資料、傳回資料(可選)。

繼續閱讀