使用UpdatePanel控件應注意以下兩個方面:
一、Rsponse.Write()是程式調試中的常見語句,但使用了UpdatePanel後,由于UpdatePanel中的控件觸發的是異步調用過程,使用它就會報JavaScript錯誤。(不能使用)
解決辦法:
System.Web.UI.ScriptManager.RegisterStartupScript(btnQuery,this.GetType(),"msg1","alert('js腳本')",true);
通過System.Web.UI.ScriptManager類的靜态方法RegisterStartupScript向頁面注冊了頁面加載完成後便執行的JS代碼。
public static void RegisterStartupScript(
Control control,//正在注冊該用戶端腳本塊的控件
Type type, //通常使用typeof運算符或GetType()擷取控件的類型
string key, //該腳本塊的惟一辨別符
string script, //JavaScript内容
bool addScriptTags //如果用<script></script>标記括起該腳本塊,則為true,否則為false
)
二、UpdatePanel的Visible屬性要慎用
一個頁面中如果有多個UpdatePanel,但是在程式中可能會通過其他控件來控制UpdatePanel控件的顯示與否,這時第一考慮到的就是使用UpdatePanel控件的Visible屬性,如果此屬性設定為false的話,UpdatePanle在Render成HTML代碼時,并不會生成相應的HTML代碼,也就是說,頁面HTML的DOM中根本就沒有這個UpdatePanel對應的對象。
解決辦法,通過設定UpdatePanel控件的Style屬性,通過css中的display屬性間接實作,由于UpdatePanel沒有Style屬性,是以在每個UpdatePanel控件的外面加上一個Panel控件。
<style type="css/text">
.hidden
{
display:none;
}
.show
{
display:block;
</style>
<asp:Panel ID="p1" runat="server">
<asp:UpdatePanel ID="up1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:Button ID="btnShow" runat="server" Text="顯示"></asp:Button>
<asp:Button ID="btnHide" runat="server" Text="隐藏"></asp:Button>
在Page_Load事件中
this.btnShow.OnClientClick = " $get(' " + this.p1.ClientID + " ').className = 'show' ; return false " ;
this.btnHide.OnClientClick = " $get(' " + this.p1.ClientID + " ').className = 'hide' ; return false ";
說明:$get()是ScriptManager控件向用戶端注冊的一個JavaScript方法,相當于document.getElementById()方法。