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 = eventTarget;


theFrom.__EVENTARGUMENT.value = eventArgument;


theForm.submit();

 

}

-- >

</script >


<input id="Button1" type="button" name="Button1" value="按钮" >


方法四:

 <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 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
原文地址:https://www.cnblogs.com/yangjinwang/p/3957766.html