1. 程式人生 > >前臺js與後臺C#互相呼叫 & JS於HTML互動

前臺js與後臺C#互相呼叫 & JS於HTML互動

C#程式碼與javaScript函式的相互呼叫?

問:
1.如何在JavaScript訪問C#函式?
2.如何在JavaScript訪問C#變數?
3.如何在C#中訪問JavaScript的已有變數?
4.如何在C#中訪問JavaScript函式?

問題1答案如下:
javaScript函式中執行C#程式碼中的函式:
方法一:1、首先建立一個按鈕,在後臺將呼叫或處理的內容寫入button_click中;
          2、在前臺寫一個js函式,內容為document.getElementById("btn1").click();
          3、在前臺或後臺呼叫js函式,激發click事件,等於訪問後臺c#函式;

方法二:1、函式宣告為public              
             後臺程式碼(把public改成protected也可以)

public string ss()
             
... {
                
return ( " a " );
              }


          2、在html裡用<%=fucntion()%>可以呼叫
             前臺指令碼

< script language = javascript >
             
var a = "
<%=ss()%> " ;
              alert(a);
             
</ script >


方法三:1、

< script language ="javascript" > ...
             
<!--
             
function __doPostBack(eventTarget, eventArgument)
             
... {
                
var theForm = document.Form1;        // 指runat=server的form

                 theForm.__EVENTTARGET.value = eventTarget;
                 theFrom.__EVENTARGUMENT.value
= eventArgument;
                 theForm.submit();
              }

             
-->
             
</ script >
             
< input id ="Button1" type ="button" name ="Button1" value ="按鈕" onclick ="javascript:__doPostBack('Button1','')" >


        
ASPX頁面有包含asp:LinkButton或者帶有AutoPostBack屬性且其值為true的伺服器控制元件時,ASP.NET會自動為頁面生成下面的指令碼:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
這兩個引數分別由隱藏的兩個表單域__ EVENTTARGET和__ EVENTARGUMENT儲存。
這兩個隱藏的表單可以查詢引起頁面回送的控制元件ID和回送時的引數:
string target = Request.Params["__EVENTTARGET"];
string args = Request.Params["__EVENTARGUMENT"];
asp:Button和asp:ImageButton不是使用__doPostBack回送頁面,所以使用這兩個控制元件回送頁面時,上面的程式碼是無效的。


方法四:

< script language ="javascript" > ...
function SubmitKeyClick()
... {
      
if (event.keyCode == 13 )
      
... {
           event.cancelBubble
= true ;
           event.returnValue
= false ;
           document.all.FunName.value
= " 你要呼叫的函式名 "
           document.form[
0 ].submit();
       }

}

</ script >

< INPUT onkeypress ="SubmitKeyClick()" id ="aaa" type ="text" >
< input type ="hidden" name ="FunName" > 〈!--用來儲存你要呼叫的函式 --〉

在.CS裡有:
public Page_OnLoad()
{
if (!Page.IsPost())
{
string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";
//根據傳回來的值決定呼叫哪個函式
switch(strFunName)
{
case "enter()":
enter() ; //呼叫該函式
break;
case "其他":
//呼叫其他函式
break;
default:
//呼叫預設函式
break;
}
}
}

public void enter()
{
//……比如計算某值
}

問題2.如何在JavaScript訪問C#變數?
答案如下:
方法一:1、通過頁面上隱藏域訪問<input id="xx" type="hidden" runat="server">
方法二:1、如後臺定義了PUBLIC STRING N;前臺js中引用該變數的格式為'<%=n%>'或"+<%=n%>+"
方法三:1、或者你可以在伺服器端變數賦值後在頁面註冊一段指令碼
             "<script language='javascript'>var temp=" + tmp + "</script>"
             tmp是後臺變數,然後js中可以直接訪問temp獲得值。


3.如何在C#中訪問JavaScript的已有變數?

答案如下:

方法一:1、前臺使用靜態文字控制元件隱藏域,將js變數值寫入其中;
          2、後臺用request["id"]來獲取值;

方法二:可以用cookie或session


4.如何在C#中訪問JavaScript函式?
答案如下:
c#程式碼中執行javaScript函式:
方法一:1、Page.RegisterStartupScript("ggg","<script>SetVisible(1);</script>");
方法二:使用Literal類,然後

private void Button2_Click( object sender, System.EventArgs e)
... {
string str;
str
= " <script language='javascript'> " ;
str
+= " selectRange() " ;
str
+= " </script> " ;
// Literal1.Visible=true;
Literal1

                                                        【引用 笨笨的空間

----------------------------------------JS於HTML互動------------------------------------------------------------------------

index.html檔案:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>.js 檔案怎樣接受html 傳遞的引數</title>
<script language="javascript" src="main.js" >
</script>
</head>
<body style="height:300px;">
<form>
<input type="button" name="button1" value="測試" onClick="javascript:Mytest();">
<input type="hidden" id="linksrc" name="" value=" http://www.baidu.com">
<input type="hidden" name="linksrctempss" value=" http://www.sina.com">
</form>
</body>
</html>


main.js的內容:
function Mytest(){
var linksrc = document.getElementById("linksrc").value;
var linksrctempss = document.getElementsByName("linksrctempss")[0].value;
alert("linksrc="+linksrc);
alert("linksrctempss="+linksrctempss);
}

【備註:document.getElementsByName(name)獲取的是”陣列型別“,document.getElementById(id)獲取的是”值“】