ASP.NET 前台Javascript調用后台代碼 / 后台調用前台Javascript


1:ASP.NET 前台Javascript調用后台代碼

1.1:前台Javascript

1 <script>
2     function CallCs() {
3         var str = "<%=GetStr()%>";
4         alert(str);
5     }
6 </script>
7 
8 <input type="button" name="btnClick" value="js調用后台代碼" onclick="CallCs();" />

1.2:后台cs代碼

1 public string GetStr()
2 {
3     string str = "Hello World";
4     return str;
5 }

1.3:源代碼執行順序:

1.3.1:加載后台Page_Load方法(執行完畢Page_Load中的方法):

1.3.2:跳轉到前台執行<%=FunctionName();%>:(執行綁定后台代碼的操作)

1.3.3:執行前台js綁定的后台方法

1.3.4:繼續執行前台js方法,並把后台方法GetStr()返回值賦值給str(此時CallCs方法並未被調用,所以不會執行alert()方法)

1.3.5:執行前台Js其他代碼(此時js所調用的后台代碼已經執行完畢),等待調用CallCs方法

1.3.6:點擊前台Button(name="btnClick"),則會調用CallCs js代碼

Ps:通過輔助按鈕實現前台JS調用后台代碼

1、先在前台添加一個服務器端按鈕,雙擊,進入后台.cs頁,寫下將要執行的代碼如下:

1 protected void Button4_Click(object sender, EventArgs e) {
2 
3 //在此方法里寫下要執行的代碼,此處為簡單的示例
4 
5 Response.Write("<script>alert('O(∩_∩)O哈哈~你好!')</script>");
6 
7 }

2、將該按鈕的Width屬性設為0,將Height屬性設為0,形如

1 <asp:Button ID="btnhoutai" runat="server" Text="" Width="0" Height="0" onclick="Button4_Click" />

3、在前台添加一個JS函數,如下:

function Show1() {
  document.getElementById("btnhoutai").click();
}

4、添加html按鈕並將其onclick="Show1()"; 如下:

<input id="btnjs" type="button" value="Js 調用后台C#函數" onclick="Show1()"/>

經過以上這四步就可以實現JS調用后台的代碼了。

2:ASP.NET 后台調用前台Javascript 

2.1.1:前台Javascript (ASP.NET button 不在UpdatePanel中)

1 <script>
2    //ASP.NET button 不在UpdatePanel中
3     function CsCall() {
4         var str = "Hello World CsCall!";
5         alert(str);
6     }
7 </script>
8 
9 <asp:Button Text="后台調用js" runat="server" ID="BtnCsCall" OnClick="BtnCsCall_Click" />

2.1.2:后台cs代碼

1  protected void BtnCsCall_Click(object sender, EventArgs e)
2  {
3      ////使用這種則直接調用前台js方法,不會再所有代碼之后添加CsCall Js(由最后一個參數 bool addScriptTags決定)
4      //this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "<script>CsCall();</script>", false);
5 
6      //使用這種方法則會在前台所有代碼之后添加<script>CsCall();</script>(由最后一個參數 bool addScriptTags決定)
7      this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "CsCall();", true);
8  }

2.1.3:源代碼執行順序:

2.1.3.1:加載后台Page_Load方法(執行完畢Page_Load中的方法):

2.1.3.2:執行前台Js非方法中的代碼

2.1.3.3:點擊前台服務器button控件(ID="BtnCsCall"),先回調Page_Load方法(可以使用Page.IsPostBack判斷是否回調)

2.1.3.4:回調完Page_Load方法,則執行BtnCsCall_Click方法

2.1.3.5:執行完BtnCsCall_Click后台方法,則繼續執行前台非方法中的代碼

2.1.3.6:然后執行前台所有代碼之后的<script>CsCall();</script>代碼 [由后台方法動態添加],最后調用CsCall js方法

2.2.1:前台Javascript (ASP.NET button 在UpdatePanel中)

1 <script>
2     //ASP.NET button在UpdatePanel中
3     function CsCall() {
4         var str = "Hello World CsCall!";
5         alert(str);
6     }
7 </script>
1 <form id="form1" runat="server">
2     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
3     <asp:UpdatePanel ID="UpdatePanel1" runat="server">
4         <ContentTemplate>
5             <asp:Button Text="UpdatePanelButtonCsCallJs" runat="server" ID="btnUpdatePanelButton" OnClick="btnUpdatePanelButton_Click" />
6         </ContentTemplate>
7     </asp:UpdatePanel>
8 </form>

2.2.2:后台cs代碼

1  protected void btnUpdatePanelButton_Click(object sender, EventArgs e)
2  {
3      //若有UpdatePanel就用如下代碼調用前台js
4      ScriptManager.RegisterStartupScript(UpdatePanel1, this.Page.GetType(), "", "CsCall();", true);
5  }

<1>后台代碼調用前台JS代碼

一、說到后台代碼調用前台的JS代碼很多人首先就會想到使用 ClientScript.RegisterStartupScript()方法

該方法主要是注冊啟動腳本文本,即在后台執行調用前台JS代碼

該方法有兩個重載,

1、ClientScript.RegisterStartupScript(Type type,string key ,string script)//分別表示:1、要注冊的啟動腳本的類型(一般直接填this.GetType()即可),2、要注冊的啟動腳本的鍵(相當於為執行腳本起一個名字,任意名即可),3、要注冊的啟動腳本文本(一般為"<script>函數()</script>");示例:

 1 this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "<script>CsCall();</script>"); 

2、ClientScript.RegisterStartupScript(Type type,string key, string script,bool flag);//該函數和第一參數的區別在於將最后一個參數設為"ture"時,第三個參數可以直接寫被調用的函數,不用再加"<script></script>",這兩個方法差別不是很大。示例:

1 //使用這種方法則會在前台所有代碼之后添加<script>CsCall();</script>(由最后一個參數 bool addScriptTags決定)
2 this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "CsCall();", true);

這里需要特別注意的是在注冊啟動腳本的時候,鍵是唯一的,不能重復,如果有將會報錯。

二、使用ClientScript.RegisterClientScriptBlock()方法

該方法有兩個重載,使用方法幾乎和ClientScript.RegisterStartupScript()的兩個方法一模一樣。這里只是給出示例,就不再做過多的解釋。

1 this.Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "", "<script>CsCall();</script>");
2 this.Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "", "CsCall();", true);

在這里主要講一下RegisterClientScriptBlock方法和RegisterStartupScript方法和區別

RegisterStartupScript,這種方法會把JS代碼嵌入在頁面的底部、表單的最后 (</form>前面),適用於要在頁面控件加載完成后運行的JS代碼

RegisterClientScriptBlock,這種方法會把JS代碼嵌入在頁面的頂部、表單的最前 (<form>后面),適用於要在控件加載前執行的JS代碼

三、使用Control.Attribute屬性

這也是一種比較簡單好用的方法,可以將該方法和控件的客戶端方法相關聯,比如“onblur,onfocus,onmousemove,onmouseover“等,在這里只是把該方法作為Control的一個屬性來用。

示例:

在Page_Load()方法里添加如下代碼:

txtname.Attributes["onblur"] = "show('" + txt.Text + "')";//當用戶離開文本框時,會提示所輸入的內容

還可以通過這種方法來控制前台的顯示。其實現方法和本例的方法都是一樣的,在這里就不做過多的介紹了。

四、可以使用Control的一個屬性,OnClientClick

為該屬性賦值OnClientClick="SayHello()";則就會調用客戶端的方法,該方法的本質就是一個客戶端的方法。

示例:

<asp:Button ID="Button1" runat="server" OnClientClick="Get()" Text="OnClientClick方法測試"/>

 ASP.NET測試源代碼:鏈接:http://pan.baidu.com/s/1bnZzQ03  密碼:zm1f


免責聲明!

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



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