第一種,OnClientClick (vs2003不支持這個方法)
<asp:ButtonID="Button1" runat="server" Text="Button" OnClientClick="client_click()"OnClick="Button1_Click" />
client_click()就是javascript的一個方法。
例如:
<script type="text/javascript">
functionaa() {
alert("aaa");
returnfalse; //返回false 就不執行button的后台代碼
}
</script>
==================
<p><asp:Button ID="button11" runat="server" Text="button" OnClientClick="returnaa();"
onclick="button11_Click" /> </p>
==========================================================
第二種,Button1.Attributes.Add("onclick","return Client_Click()");
“Client_Click() “是一個前台方法,可以替換成一般的腳本如:retrunconfirm('確定刪除嗎?')
第三種,是我自認為最靈活的一種,ClientScript.RegisterStartupScript
例子:StringBuildersb = new StringBuilder();
sb.Append("<scriptlanguage='javascript'>");
sb.Append("Button2_onclick('"+ serverPath + "')");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "LoadPicScript",sb.ToString());
第四種. 用Response.Write方法寫入腳本
比如在你單擊按鈕后,先操作數據庫,完了后顯示已經完成,可以在最后想調用的地方寫上
Response.Write("<scripttype='text/javascript'>alert();</script>");
這個方法有個缺陷就是不能調用腳本文件中的自定義的函數,只能調用內部函數,具體調用自定義的函數只能在Response.Write寫上函數定義,比如Response.Write("<scripttype='text/javascript'>function myfun(){...}</script>");
第五種用ClientScript類動態添加腳本
用法如下:在想調用某個javascript腳本函數的地方添加代碼,注意要保證MyFun已經在腳本文件中定義過了。
ClientScript.RegisterStartupScript(ClientScript.GetType(),"myscript", "<script>MyFun();</script>");
這個方法比Response.Write更方便一些,可以直接調用腳本文件中的自定義函數。
例如:
protected voidButton1_Click(object sender, EventArgs e)
{
MessageBox.Show("111"); //先執行了這句,再往下執行
ClientScript.RegisterStartupScript(this.GetType(),"aa", "<script>click1('aaaa')</script>");//click1('aaaa')是前台jQuery函數
}
前台腳本:
<script type="text/javascript">
function click1(a) {
alert("click1:"+ a);
returnfalse;
}
</script>
第六種使用Page.ClientScript.RegisterClientScriptInclude
許多開發人員把JavaScript放在一個.js文件中,這是一種最佳實踐方式,因為這非常便於對應用程序進行全局的JavaScript修改。使用RegisterClientScriptInclude方法可以在ASP.NET頁面上注冊腳本文件,如下所示:
實例jsTest01.js文件中的代碼:
function skyHellow()
{
alert("呵呵……,你成功了!");
}
實例前台代碼:
<body>
<form id="form1"runat="server">
<div>
<asp:Button ID="btnOK"runat="server" onclick="btnOK_Click" Text="效果測試" />
</div>
</form>
</body>
</html>
實例后台代碼:
protected voidbtnOK_Click(object sender, EventArgs e)
{
string strJs = "jsTest01.js";
Page.ClientScript.RegisterClientScriptInclude("myKey",strJs);
Page.ClientScript.RegisterStartupScript(this.GetType(),"myJs", "skyHellow();", true);
}
后台寫script代碼 方法二:
String csname1 ="PopupScript";
Type cstype =this.GetType();
ClientScriptManager cs =Page.ClientScript;
if(!cs.IsStartupScriptRegistered(cstype, csname1))
{
String cstext1 ="alert('Hello World');"; //這種方法比較靈活。可以在這里動態傳值。
cs.RegisterStartupScript(cstype,csname1, cstext1, true);
}
但是在static 方法中用上面的代碼會提示this page 錯誤。這時應該這樣:
今天在項目中,想對asp.Net彈出提示框來個封裝,為了能更好的調用,就添加了一個CS類,結果方法還沒寫完就報錯了,提示命名空間不對,我想,那就添加引用吧,但是貌似結果也不行,在添加了所有WEB引用之后,最終提示“非靜態的字段、方法或屬性“System.Web.UI.Page.ClientScript.get”要求對象引用”
於是根據提示的命名空間做了強制轉換,就OK了。
Page page = (Page)System.Web.HttpContext.Current.Handler;
page .ClientScript.RegisterStartupScript(page.GetType(),"失敗","<script>alert('修改失敗,請稍后再試!');</script>");
同時在CS類中只需要添加以下兩個引用即可:
using System.Web;
using System.Web.UI;
來自:http://blog.csdn.net/kankankankan2222/article/details/7560049