今天同事請教如何在ASP.net的後台C#中,調用前台的javascript事件,我想起了ClientScriptManager。準備給他寫個調用的例子。前台的html裡嵌入一段指令碼javascript
<script type="text/javascript" language="javascript">
function testAlert()
{
alert("豬頭");
return false;
}
</script>
然後放了一個按鈕,雙擊後後台寫入他的點擊事件: protected void Button1_Click(object sender, EventArgs e)
{
String csname1 = "PopupScript";
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
String cstext1 = "testAlert();";
cs.RegisterStartupScript(cstype, csname1, cstext1, true);
}
}
結果一測試,老是報錯:“缺少對象”。這下鬱悶了,不知道什麼地方出了問題,是因為命令中包含了分號?去掉分號後,仍然報次錯。鬱悶許久以後,靈機一動,把剛才那段js單獨寫為一個js檔案,然後在頁面中連結方式嵌入次檔案<script type="text/javascript" language="javascript" src="js/test1.js" />
再試,ok!測試通過了!指令碼調用成功。但原因還是不知何故。
之所以沒有採用 Button1.attribute.add("onclick","testAlert()"); 的方式,因為他需要幕後處理一下資料,並作為參數傳遞給那個js的方法。
2007-2-10 1:00 原因查明:
只需要把
<script type="text/javascript" language="javascript">
function testAlert()
{
alert("豬頭");
return false;
}
</script>
改為
<script type="text/javascript">
function testAlert()
{
alert("豬頭");
return false;
}
</script>
就好了!去掉那個 language="javascript" 的屬性即可!
2007-3-21 更新
(在Asp.Net AJAX 1.0下,如果觸發按鈕在UpdatePannel中調用前台js方法時,需做如下改動)
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(),
"close", "CloseMe();", true);