ScriptManager.RegisterClientScriptBlock:
MSDN中對這個方法的解釋為:
向 ScriptManager 控制項註冊一個用戶端指令碼塊,以便和 UpdatePanel 控制項中的某個控制項一起使用,然後將該指令碼塊添加到頁面中。
大概的意思不難理解。下面看這段代碼:
<asp:ScriptManager ID="ScriptManager1" runat="server"><br /> </asp:ScriptManager></p><p> <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"><br /> <ContentTemplate><br /> <asp:Button ID="Button2" runat="server" Text="一個Button" OnClick="Button2_Click" /><br /> <cc1:ConfirmButtonExtender ID="ConfirmButtonExtender1" TargetControlID ="Button2" ConfirmText ="你確認提交嗎?" runat="server"><br /> </cc1:ConfirmButtonExtender><br /> </ContentTemplate><br /> </asp:UpdatePanel>
頁面上有一個updatePanel,裡面放了一個button和一個ConfirmButtonExtender控制項。
並將button的ID付給 ConfirmButtonExtender的TargetControlID。
後台代碼:
protected void Button2_Click(object sender,EventArgs e)<br /> {<br /> ScriptManager.RegisterClientScriptBlock(Button2, typeof(Button), "commit", "alert('已經確認!')", true);<br /> Button2.Text = "按鈕已經改變";<br /> }
可以看到alert('已經確認!') 是在Button2_Click中"註冊"的。
效果: 點擊button彈出確認視窗.
點確認後Button的Text變為“按鈕已經改變”,點取消什麼也不發生。
奇怪的是無論你把 Button2.Text這句放在ScriptManager這句前面還是後面都是點確認後Button的Text才會改變,打個斷點調試下也證明Button2_Click事件是在確認後才觸發的。
問題就是:
1.為什麼ScriptManager這句要放在Button2_Click事件中呢?
2.同樣的一個單擊事件,用在Page_Load中加入Button2.Attribute.Add("onclick","<script>alert('已經確認!')</script>");的方法為什麼就不行呢?
-----------------------------------------------------分割線-------------------------------------------------
基本上講一但一個控制項被扔進了UpdatePanel中 給它綁定一個用戶端Script代碼就不行用普通的方式了。
我們將上面的代碼簡化下:
<asp:UpdatePanel ID="UpdatePanel1" runat="server"><br /> <ContentTemplate><br /> <asp:Button ID="Button1" runat="server" Text="你給我彈個看看 "/><br /> </ContentTemplate><br /></asp:UpdatePanel>
然後在後台中寫上:
protected void Page_Load(object sender, EventArgs e)<br />{<br /> Button1.Attributes.Add("onclick", "<mce:script type="text/javascript"><!--<br />callit();<br />// --></mce:script>");<br />}
運行後照樣是提示javascript出錯。