首页 > 代码库 > C#与js的各种交互

C#与js的各种交互

今天遇到一个问题,查到不错的资料,放上来记录一下,以防忘记地址,算是我的笔记吧!

很多人都向在服务器端调用客户端的函数来操作,也就是在asp中调用javascript脚本中已经定义好的脚本函数。经过研究,发现了一些勉强的方法。


1. 用Response.Write方法写入脚本

比如在你单击按钮后,先操作数据库,完了后显示已经完成,可以在最后想调用的地方写上
Response.Write("<script type=‘text/javascript‘>alert();</script>");

这个方法有个缺陷就是不能调用脚本文件中的自定义的函数,只能调用内部函数,具体调用自定义的函数只能在Response.Write写上函数定义,比如Response.Write("<script type=‘text/javascript‘>function myfun(){...}</script>");

2.用ClientScript类动态添加脚本


用法如下:在想调用某个javascript脚本函数的地方添加代码,注意要保证MyFun已经在脚本文件中定义过了。

ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>MyFun();</script>");


这个方法比Response.Write更方便一些,可以直接调用脚本文件中的自定义函数。


3.普通的添加控件的Attributes属性

对于普通按钮就是:Button1.Attributes.Add("onclick","MyFun();");

只能在Onload中或类似于onload的初始化过程中添加才有效。而且是先执行脚本函数,无法改变执行顺序。


注意,以上所有方法中,后台代码都不能有转化当前页的代码,比如Redirect等,要把转页代码放在脚本里面


问:


1.如何在JavaScript访问C#函数?


2.如何在JavaScript访问C#变量?


3.如何在C#中访问JavaScript的已有变量?


4.如何在C#中访问JavaScript函数?


问题1答案如下:


javaScript函数中执行C#代码中的函数:


方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;


2、在前台写一个js函数,内容为document.getElementByIdx("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 = http://www.mamicode.com/eventTarget;


theFrom.__EVENTARGUMENT.value = http://www.mamicode.com/eventArgument;


theForm.submit();

 

}

 

-- >

</script >


<input id="Button1" type="button" name="Button1" value="http://www.mamicode.com/按钮" >


方法四: <script language="javascript" >


function SubmitKeyClick()

{

if (event.keyCode == 13)

{

event.cancelBubble = true;

event.returnValue = http://www.mamicode.com/false;

document.all.FunName.value="http://www.mamicode.com/你要调用的函数名";


document.form[0].submit();


}


}


</script >


<INPUT 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

 

C#与js的各种交互