C〓〓とJSは相互作用します

17974 ワード

C鑰コードとjavaScript関数の相互呼び出し:
1.JavaScriptでC〓関数を訪問するにはどうすればいいですか?
2.JavaScriptでC〓変数にどうやってアクセスしますか?
3.JavaScriptの既存の変数はどうやってC嗳中を訪問しますか?
4.どうやってC〓〓の中でJavaScript関数を訪問しますか?
問題1の答えは以下の通りです.
javaScript関数では、C〓というコードの関数を実行します.
方法1:ページとページを結合する
1、関数宣言はpublicです.           
             バックグラウンドコード(publicをprotectedに変えてもいいです.)
            
1 public string ss()

2 {

3         return("a");

4 }
 
2、htmlでは「%=ss()%」で呼んでもいいです.///C〓のバックグラウンドの関数名です.
             フロントスクリプト
1 <script language=javascript>

2 

3              var a = "<%=ss()%>";//JavaScript   C#     

4          alert(a);

5  </script>
 
方法2:JavaScript非同期呼び出しASP.Netページで定義する方法
               1.この方法を公有と宣言する(public).
               2.この方法を、例示的な方法ではなく、クラス方法として宣言する.
               3.この方法を【WebMethod】属性を追加します.
               4.ページのScript ManagerコントロールのEnbalePageMethods属性をtrueに設定します.
               5.クライアントでは、以下のJavaScriptの文法を使って、このページのメソッドを呼び出します.
                   PageMethods.[MethodName]
               6.クライアントの非同期のためにコールバック関数を指定し、コールバック関数で戻り値を受け取り、さらに処理する.
               7.using System.Web.Servicesを追加する.
例:
フロントJavaScriptコード
 1 <html xmlns="http://www.w3.org/1999/xhtml">

 2  <head runat="server">

 3      <title>    </title>

 4     <script type="text/javascript">

 5      function JsCallCSharp(param1)

 6      {

 7                   PageMethods.sayhell(param1,onSayHelloSucceeded);//sayhell      【webMethod】      param1         ,onSayHelloSucceeded                     

 8      }

 9             function onSayHelloSucceeded(result)//       

10      {

11      alert(result);

12      }

13 

14     </script>

15 

16 </head>

17  <body>

18      <form id="form1" runat="server">

19      <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">//ScriptManager       ,

20 

21     EnablePageMethods="true"   

22      </asp:ScriptManager>

23      <div>

24          <input type="button" onclick="JsCallCSharp('hello')" />     </div>

25      </form>

26  </body>

27  </html>

28 
 バックグラウンドコード(.csファイル)
using System;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Web.Services;//  web    

 

 public partial class _Default : System.Web.UI.Page {

 protected void Page_Load(object sender, EventArgs e)

 { 

 

 }

 [WebMethod]//   web      

 public static string sayhell(string say)//        ,      

 {

     return say;

 }

 }
 
方法3:JavaScript非同期呼び出しは、Webサービスクラスで定義される方法を指す.
1.ウェブサービスの表示を追加します.このサービスはASP.NET AJAXを使ってスクリプトからこのWebサービスを呼び出すことができるようにします.
対応する属性は[System.Web.Script.Services.Script Service]です.
2.この方法をpublicと宣言し、この方法を[webMethod]の属性方法として表記する.
3.ページ内のScript Managerコントロールにwebサービスの参照<Services><asp:ServiceReference Path=“~/WebService.asmx”/>を追加します.
4.クライアントでは、以下のJavaScriptの文法を使ってwebサービスを起動する方法を使用しています.
WebService.HelloWorld("helloWord",function(res)//Webservice web       HelloWord web         ,

function   JavaScript            

      {

      alert(res);

      }

); 
 
例:
ページコード
<html xmlns="http://www.w3.org/1999/xhtml">

 <head runat="server">

     <title>    </title>



    <script type="text/javascript">

     function JsCallCSharp(param1)

     {

                  PageMethods.sayhell(param1,onSayHelloSucceeded);

     }

            function onSayHelloSucceeded(result)

     {

     alert(result);

     }



//         

     function JsCallWebService()

     {

      WebService.HelloWorld("helloWord",function(res)//  web        {

      alert(res); 

     });

     } 

    </script>



</head>

 <body>

     <form id="form1" runat="server">

     <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" >

    <Services><asp:ServiceReference Path="~/WebService.asmx" />

</Services>//     web  

     </asp:ScriptManager>

     <div> 

       <input type="button" onclick="JsCallCSharp('hello')" value="  C#   " />

         <input type="button" onclick="JsCallWebService()" value="  web   " />

     </div>

     </form>

 </body>

 </html>
 
ウェブサービスのバックグラウンドコード
using System;

using System.Collections;

using System.Linq;

 using System.Web;

 using System.Web.Services;

 using System.Web.Services.Protocols;

 using System.Xml.Linq;



/// <summary> ///WebService       /// </summary>

 [WebService(Namespace = "http://tempuri.org/")]

 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //       ASP.NET AJAX         Web   ,         。 [System.Web.Script.Services.ScriptService]//         public class WebService : System.Web.Services.WebService {



    public WebService () {



        ////InitializeComponent();

     }



    [WebMethod]//        

     public string HelloWorld(string result) {

         return result;

     }

     }
 
問題2答えは以下の通りです.JavaScriptでC嗳変数にどうやってアクセスしますか?
方法1:1、ページ上で隠しドメインアクセス<input id=“xx”type=“hidden”runan=“server”>
方法の2:1、バックグランドのようにPUBLIC STRING Nを定義しました.デスクjsで参照してください.この変数のフォーマットは'<%=n%>'または'+<%=n%>+"です.
方法3:1、またはサーバー側の変数の割り当て後、ページにスクリプトを登録することができます.
             "スクリプトlaguage='javascript''var temp="+tmp+""
             tmpはバックグラウンド変数で、jsで直接にtemp取得値にアクセスできます.
問題3.JavaScriptの既存変数はどうやってC菗中を訪問しますか?
方法1:1、フロントはサーバテキストコントロールでドメインを隠し、js変数値を書き込みます.バックグラウンドは直接コントロールIDでアクセスして呼び出します.
方法2:cookieまたはsessionで変数値を格納できます.バックグラウンドは直接使用できます.
問題4 C⻠コード実行JavaScript関数とJavaScript関数の呼び出し
方法1:できるだけレスキュー.Writeを使わないようにします.この方法はCSSに影響を与え、ページ効果のばらつきを引き起こす.
方法2:C〓ではScript Manager.Register Startup Script(this,this,GetType(),“edit”,“CSharpCallJs(')+param 1+“、'”+param 2+“”を使用しています.
例:
スクリプト関数
function CSharpCallJs(param1,param2)

           {

               alert(param1 + param2);

           }
 
ページのバックグラウンドコード
ScriptManager.RegisterStartupScript(this, this.GetType(), "edit", "CSharpCallJs('" + param1 + "','" + param2 + "');", true);//               
 
方法3:C〓ではPage.Register Startup Script(gg)、“script”CSharpCallJs“”+param 1+“”+param 2+“”;“script”);
方法四:C〓中でLiteral類(label類に類似)を使用する
サンプルコード
private void Button2_Click(object sender, System.EventArgs e)



{



string str;



str="<script language='javascript'>";



str+="selectRange()";



str+="</script>";



//Literal1.Visible=true;



Literal1.Text=str;



}