最近的項(xiàng)目中一直在使用Atlas July CTP,自從Atlas正式更名后,連續(xù)推出了Beta和Beta2兩個(gè)版本,不過(guò)我一直在觀望,原因就是Beta版本不穩(wěn)定而且升級(jí)太麻煩了。一日偶然看到了楊丹的這篇隨筆,忽然發(fā)現(xiàn)原來(lái)ScriptManager能注冊(cè)在客戶端部分刷新的UpdatePanel中注冊(cè)啟動(dòng)后執(zhí)行的JavaScript!這可是困擾了我非常長(zhǎng)時(shí)間的一個(gè)問題!這樣不僅能在使用UpdatePanel的情況下使用Javascript彈出對(duì)話框,也能在研發(fā)使用Javascript腳本的服務(wù)器控件的時(shí)候,使控件的起動(dòng)腳本得以執(zhí)行,這樣原來(lái)的和UpdatePanel不兼容的控件能非常容易的改為AJAX enabled^_^。
不過(guò),令人不解的是不知道處于什么考慮,RegisterStartupScript函數(shù)竟然實(shí)現(xiàn)為了類的靜態(tài)函數(shù),可是沒有ScriptManager的UpdatePanel更本不能執(zhí)行啊,這樣還需要多打幾個(gè)字!另外,需要注意的是第一個(gè)參數(shù)是UpdatePanel的實(shí)例,如果在頁(yè)面中有多個(gè)UpdatePanel,如果每個(gè)UpdatePanel的UpdateMode都是“always”[默認(rèn)值]的話,那么你使用那個(gè)UpdatePanel的實(shí)例作為參數(shù)都能;如果每個(gè)UpdaePanel的UpdateMode=conditional,那么你必須使用正在更新的那個(gè)UpdatePanel作為參數(shù),這樣腳本才能起作用。下面是我作的一個(gè)簡(jiǎn)單的示例:
頁(yè)面標(biāo)記
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
代碼
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(1000);
TextBox1.Text = DateTime.Now.ToLongTimeString();
TextBox2.Text = TextBox1.Text;
string js = "alert(ok button1 clicked!)";
Microsoft.Web.UI.ScriptManager.RegisterStartupScript(UpdatePanel2, this.GetType(), "btn1clicked", js, true);
}
protected void LinkButton2_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(900);
TextBox2.Text = DateTime.Now.ToLongTimeString();
TextBox1.Text = TextBox2.Text;
string js = "alert(ok button 2 clicked!)";
Microsoft.Web.UI.ScriptManager.RegisterStartupScript(UpdatePanel2, this.GetType(), "btn2clicked", js, true);
}
} BTW,我在使用時(shí)發(fā)現(xiàn)一個(gè)問題,不知道是個(gè)Bug還是我使用不當(dāng),我在調(diào)試中發(fā)現(xiàn)UpdatePanel.IsInPartialRendering的值始終是false!希望有高人指點(diǎn)一下:)。
新聞熱點(diǎn)
疑難解答
圖片精選