日期:2014-05-16  浏览次数:20411 次

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

本章主要讲述网页建设中C#代码与前台js实现交互的几种应用

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

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

为了表述方便,现在假设引入一个button。那么可以在后台将需要调用或处理的内容写入button_click中;然后在前台写一个js函数,内容为document.getElementById("btn1").click();此函数目的是实现调用后台写好的函数,激发c那个lick事件;
方法二、前台调用如下js代码,含一个隐藏域,目的是触发既定的函数
<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 onclick="SubmitKeyClick()" id="aaa" type="button">
<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()
{
    //……
}

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

方法一:通过页面上隐藏域访问,比如可以放一个隐藏控件,在后台根据条件给其附值,在前台JS里判断其值并根据其值弹出
<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"]来获取值,列如
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            unInclude = Request.QueryString["uninclude"];  
            //...
        }
    }
    private string unInclude
    {