不通过服务器控件时用前端javascript与c#后台交互的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不通过服务器控件时用前端javascript与c#后台交互的方法相关的知识,希望对你有一定的参考价值。

一,如果通过前台javascript调用后台aspx里面的函数?

实现某个功能不同的思路会用不同的实现方法,本章仅做抛砖引玉用
方法一、参考本博客前文“ WebForm实现实时信息提醒功能(Timers与Ajax实现及优劣浅析)”方法二,通过AjaxPro直接调用,里面重点是:
             1、在后台Load的时候可以注册你的后台类,例如:AjaxPro.Utility.RegisterTypeForAjax(typeof(MyClass));
              2、然后注册你的方法
[csharp] view plain copy
 
 print?技术分享技术分享
  1. [AjaxPro.AjaxMethod]  
  2. public string GetUrl()  
  3. {  
  4.      ....  
  5. }  
             3、最后前台直接调用就可以了,例如: var str = MyClass.GetUrl().value;

为了表述方便,现在假设引入一个button。那么可以在后台将需要调用或处理的内容写入button_click中;然后在前台写一个js函数,内容为document.getElementById("btn1").click();此函数目的是实现调用后台写好的函数,激发c那个lick事件;
方法二、前台调用如下js代码,含一个隐藏域,目的是触发既定的函数
[javascript] view plain copy
 
 print?技术分享技术分享
  1. <script language="javascript">...  
  2. function SubmitKeyClick()  
  3. ...{  
  4.       if (event.keyCode == 13)  
  5.       ...{  
  6.           event.cancelBubble = true;  
  7.           event.returnValue = false;  
  8.           document.all.FunName.value="你要调用的函数名";  
  9.           document.form[0].submit();  
  10.       }  
  11. }  
  12. </script>  
  13.   
  14. <input onclick="SubmitKeyClick()" id="aaa" type="button">  
  15. <input type="hidden" name="FunName"> 〈!--用来存储你要调用的函数 --〉  

然后.cs页面的代码如下
[csharp] view plain copy
 
 print?技术分享技术分享
  1. public Page_OnLoad()  
  2. {  
  3.     if (!Page.IsPost())  
  4.     {  
  5.         string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";//根据传回来的值决定调用哪个函数  
  6.         switch(strFunName)  
  7.     {  
  8.         case "enter()":  
  9.         enter() ; //调用该函数  
  10.         break;  
  11.         case "其他":  
  12.         //调用其他函数  
  13.         break;  
  14.         default:  
  15.         //调用默认函数  
  16.         break;  
  17.     }  
  18.     }  
  19. }  
  20. public void enter()  
  21. {  
  22.     //……  
  23. }  

二,前台静态页面获取后台函数的变量

方法一:通过页面上隐藏域访问,比如可以放一个隐藏控件,在后台根据条件给其附值,在前台JS里判断其值并根据其值弹出
[html] view plain copy
 
 print?技术分享技术分享
  1. <input id="xx" type="hidden" runat="server">  
方法二:如后台定义了public;然后前台js中引用该变量的格式为‘<%=n%>‘或"+<%=n%>+"
方法三:或者你可以在服务器端变量赋值后在页面注册一段脚本,然后前端js会自动获取
             "<script language=‘javascript‘>var temp=" + tmp + "</script>"
             tmp是后台变量,然后js中可以直接访问temp获得值。

三,c# .cs页面通过javascript得到静态页面的变量

方法一:最简单也是最用用的,通过cookie或session或许值,然后保存在服务器端。
方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;
                2、后台用request["id"]来获取值,列如
[csharp] view plain copy
 
 print?技术分享技术分享
  1. protected void Page_Load(object sender, EventArgs e)  
  2.    {  
  3.        if (!Page.IsPostBack)  
  4.        {  
  5.            unInclude = Request.QueryString["uninclude"];    
  6.            //...  
  7.        }  
  8.    }  
  9.    private string unInclude  
  10.    {  
  11.        set  
  12.        {  
  13.            ViewState["unInclude"] = value;  
  14.        }  
  15.        get  
  16.        {  
  17.            if (ViewState["unInclude"] == null)  
  18.                return "";  
  19.            return ViewState["unInclude"].ToString();  
  20.        }  
  21.    }  

四,C# .cs页面调用访问javascript的函数

方法一:最简单也是最方便的,通过page类,直接调用:
[csharp] view plain copy
 
 print?技术分享技术分享
  1. Page.RegisterStartupScript("ggg","<script>SetVisible(1);</script>");  
方法二:使用Literal类,然后直接在后台写要调用的js函数名或者函数方法,例如:
[csharp] view plain copy
 
 print?技术分享技术分享
  1. private void Button2_Click(object sender, System.EventArgs e)  
  2. {  
  3.     string str;  
  4.     str="<script language=‘javascript‘>";  
  5.     str+="selectRange()";  
  6.     str+="</script>";  
  7.     //Literal1.Visible=true;  
  8.     Literal1.Text=str;  
  9. }  
 












以上是关于不通过服务器控件时用前端javascript与c#后台交互的方法的主要内容,如果未能解决你的问题,请参考以下文章

C#调用Activex中串口电子秤的数据,并将电子秤的数据显示到前端页面

通过服务器端设置解决前端AJAX请求跨域访问WebServie(C#开发,IIS发布)

C#中简单的问题,关于WPF程序的计时器控件。

C#与JavaScript的语法区别

如何在 C# 中由 .NET WebBrowser 控件托管的页面中调用 JavaScript 方法并将参数传递给 JavaScript 方法? [复制]

C#与JavaScript的语法区别