【轉】 C#后台調用前台javascript的五種方法


第一種,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM