• js调用后台代码的几种方式


    1. JS调用后台方法大全
      javascript函数中执行C#代码中的函数:
      方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;
      2、在前台写一个js函数,内容为document.getElementById("btn1").click();
      3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;

      方法二:1、函数声明为public
      后台代码(把public改成protected也可以)
      publicstringss()
      {
      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','')">

      方法四:<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里有:
      publicPage_OnLoad()
      {
      if(!Page.IsPost())
      {
      stringstrFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";
      //根据传回来的值决定调用哪个函数
      switch(strFunName)
      {
      case"enter()":
      enter() ; //调用该函数
      break;
      case"其他":
      //调用其他函数
      break;
      default:
      //调用默认函数
      break;
      }
      }
      }

      publicvoidenter()
      {
      //……比如计算某值
      }
    2.  
    3. JS调用后台带参数的方法

       
           对于前台调用后台的方法,我们想到最多的就是用AJAX,这个是毋庸置疑的, 我就不再这里多说了。我今天主要想说的是用JS调用后台的方法。
      对于后台往前台传值,用这种<%= nameValue%> 方法,我们是在熟悉不过了,由此,我们是否可以用同样的办法达到传值方法返回值的效果呢?
      我在这个项目中最先想到的就是尝试这种(因为这个项目用到了VML,用AJAX以前是不行,不过,后来测试还是没有问题,不过,需要把xmlns=http://www.w3.org/1999/xhtml给保留住)方法,结果是可行的。但是由于需要前台在调用后台的方法时,需要先给其传参数,这个遇到
      了一些麻烦,去网上看了一些解决方案,都是把字符串作为参数传递,而更多的网友是想知道如何传递变量的,呵呵,偶也是其中一个,因为这个变量
      的值是不确定的嘛!后台,得到一名叫“刚刚”的网友帮助,问题解决。现在把方法告知大家,以免在开发的过程中走同样的弯路。
      后台方法:
    4. protected string CsharpVoid(string strCC)
      {
         strCC = "你好!" + strCC;
        return strCC;
       }前台JS
    5.  function Init()
       {
         var v = "中国";
         var s = '<%=CsharpVoid("'+v+'") %>';
         alert(s);
       }
      这样就OK了
    6.  
    7.  
    8. 简单介绍下它的用法:
      
      一.AjaxPro的使用
      
      
      1.在项目中添加引用,浏览找到AjaxPro.2.dll文件
      
      2.在Web.config中的system.web里面写入以下代码
      </configuration>
      <system.web>
        <httpHandlers>
              <add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
            </httpHandlers>
      </system.web>
      <//configuration>
      
      3.在加载事件中,加入
        AjaxPro.Utility.RegisterTypeForAjax(typeof(类名));
      
      4.写的方法都要用
       [AjaxPro.AjaxMethod]开头,然后在写方法
      
      5.调用时必须写清楚
       命名空间名.类名.方法,例:WebUI._Default.getData();
      
      6.调用可分两中方法(同步调用,异步调用)
       
      //在后台写的无参方法
      [AjaxPro.AjaxMethod]
      public string getStr()
      {
              return  "hello my friends";
      }
      //在后台写的有参方法
       [AjaxPro.AjaxMethod]
      public string getString(string str)
      {
           return str + "Say: hello my friends";
      }
      
      a.同步调用
       (1).拖入html控件button
       (2).双击,自动显示在.aspx的脚本中
       (3).在里面写入你要输入的内容
       例:
      //------------------同步调用无参-----------
        function Button1_onclick() 
        {
               var res=WebUI._Default.getStr();
               alert(res.value);
        } 
        
      //------------------同步调用有参------------
      function Button2_onclick() //TextBox1为服务器控件
      {
          var str=document.getElementById("<%=TextBox1.ClientID%>").value;
          var res=WebUI._Default.getStr(str);
          alert(res.value);
      }
      
      
      b.异步调用
       (1).拖入html控件button
       (2).双击,自动显示在.aspx的脚本中
       (3).在里面写入你要输入的内容
       例:
      //-----------------异步调用无参-----------------
      function Button3_onclick() {
          WebUI._Default.getStr(getStrCallBack);
      }
      function getStrCallBack(res)
      {
          alert(res.value);
      }
      //-----------------异步调用有参-----------------
      function Button4_onclick() {
          var str=document.getElementById("<%=TextBox1.ClientID %>").value;
          WebUI._Default.getString(str,getStringCallBack);
      }
      function getStringCallBack(res)
      {
          alert(res.value);
      }
      
      7.调用对象
      
      //对象
      [AjaxPro.AjaxMethod]
      public Class getClass()
      {
             Class cla = new Class();
             cla.C_Id = 100;
             cla.C_Name = "34班";
             cla.Count = 20;
             return cla;
      }
      //------------------同步调用对象-----------
      function Button5_onclick() {
          var res=WebUI._Default.getClass().value;
          alert("班级编号:"+res.C_Id+"名称:"+res.C_Name+"人数:"+res.Count);
      }
      //------------------异步调用对象-----------
      function Button6_onclick() {
          WebUI._Default.getClass(getClassCallBack);
      }
      function getClassCallBack(clas)
      {
          var res=clas.value;
          alert("班级编号:"+res.C_Id+"名称:"+res.C_Name+"人数:"+res.Count);
      }
      
      
      8.数据集的使用
       //方法
              [AjaxPro.AjaxMethod]
              public DataSet getInfo()
              {
                  return WebUI.GetDataSet.getList();
              }
      
      //--------------------异步调用数据集--------------
      function Button8_onclick() {
          WebUI._Default.getInfo(getDataSetCallBack);
      }
      function getDataSetCallBack(res)
      {
          var dataset=res.value;
          var strHtml="";
          strHtml +='<table  style ="border-collapse:collapse ; border-color:Gray ;"  border="1px">';
          strHtml +='        <tr>';
          strHtml +='            <td>学生编号</td>';
          strHtml +='            <td>名称</td>';
          strHtml +='            <td>年龄</td>';
          strHtml +='        </tr>';
          
          for(var i=0;i<dataset.Tables[0].Rows.length;i++)
          {
              strHtml +='        <tr>';
              strHtml +='            <td>'+ dataset.Tables[0].Rows[i].stu_id +'</td>';
              strHtml +='            <td>'+ dataset.Tables[0].Rows[i].stu_name +'</td>';
              strHtml +='            <td>'+ dataset.Tables[0].Rows[i].stu_age +'</td>';
              strHtml +='        </tr>';
          }
          strHtml +='    </table>';
          thedata.innerHTML=strHtml;//thedata是一个<div id="thedata"></div>中的thedata
      }
      
       
      
      9.验证码的使用
      
      //----------------------验证码的使用(必须采用同步调用)----------------------
      
      //验证码的使用
      [AjaxPro.AjaxMethod]
      public bool ValidCodeData(string code)
      {
           return (HttpContext.Current.Session["CheckCode"].ToString()==code);
      }
      
      function Button9_onclick() {
          var code=document.getElementById("<%=TextBox2.ClientID %>").value;
          var bool=WebUI._Default.ValidCodeData(code).value;
          if(bool==true)
          {
              alert("ok");
          }else
          {
              alert("no");
          }
      }
      二,直接调用:
      javascript中:<%=后台方法%>
       function says()
          {
              alert("<%=Say()%>");
          }
          function del()
          {
               alert("<%=DeleteByID(8)%>");//DeleteByID(8)后台方法名
          }
      
      
      三,采用ICallbackEventHandler回调
      
      
      //必须声明System.Web.UI.ICallbackEventHandler接口
      public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
      {
          //定义一个回调的返回值
          private string Result;
          //定义两个变量,用来接收页面传过来到操作数
          private string Num1;
          private string Num2;
          protected void Page_Load(object sender, EventArgs e)
          {
              
           }
      
          /// <summary>
          /// 该方法是回调执行的方法,根据参数在这个方法中处理回调的内容,该方法没有返回值
          /// </summary>
          /// <param name="eventArgument">此参数是从客户端传过来的</param>
          public void RaiseCallbackEvent(string eventArgument)
          {
              //eventArgumeng 为javascript从客户端传递的参数,本例传过来三个参数用“/”分割将每个参数取出存入数组
              string[] PagParams = eventArgument.Split('/');
               Num1 = PagParams[1];
               Num2 = PagParams[2];
              //根据第一个参数(所选的操作符),调用不同的执行函数
              switch (PagParams[0])
              {
                  case "0":
                       Result = add(); break;
                  case "1":
                       Result = sub(); break;
                  case "2":
                       Result = multi(); break;
                  case "3":
                       Result = division(); break;
               }
           }
          
          /// <summary>
          /// 该方法是返回回调的结果给客户端
          /// </summary>
          /// <returns></returns>
          public string GetCallbackResult()
          {
              return Result;
           }
      
          //一下四个函数是通过RaiseCallbackEvent方法,调用的回调要执行操作的函数
          private string add()
          {
              double addResult = double.Parse(Num1) + double.Parse(Num2);
              return addResult.ToString();
           }
      
          private string sub()
          {
              double addResult = double.Parse(Num1) - double.Parse(Num2);
              return addResult.ToString();
           }
      
          private string multi()
          {
              double addResult = double.Parse(Num1) * double.Parse(Num2);
              return addResult.ToString();
           }
      
          private string division()
          {
              double addresult = double.Parse(Num1) / double.Parse(Num2);
              return addresult.ToString();
           }
      }
      我的实现,前台一个textbox,一个普通button,单击按钮,将textbox中的值插入数据库
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <input id="Button1" type="button" value="点击我" onclick="test();" />
         function test()
          {
             var names=document.getElementById("TextBox1").value;
             var result= _Default.insert(names).value;
             alert(result);
          }
      后台 #region
          [AjaxPro.AjaxMethod]

          public static string insert(string name)
          {

              string flag = "提交失败";
              SqlConnection conn = DbOpen.DbaseConfigConnect();
              SqlCommand command = new SqlCommand();
              command.Connection = conn;
              string str = "update WBLXDJB set WXR='" + name + "' where BXBH='DIA201'";
              command.CommandText = str;
              if (command.ExecuteNonQuery() == 1)
                  flag = "提交成功";
              return flag;

          }
          #endregion
       protected void Page_Load(object sender, EventArgs e)
          {
              AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
      }
      记得引用AjaxPro.2.dll
      web.config
      <httpHandlers>
          <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
              </httpHandlers>
     

    C#前台js调用后台代码

    前台js
    <script type="text/javascript" language="javascript">
      function Ceshi()
      {
        var a = "<%=Getstr()%>";
        alert(a);
      }
    </script>
    <input type="button" value="http://www.2cto.com/kf/201104/js调用后台代码" /> 
    后台代码
    public string Getstr()
    {
      string aa = "你们好啊!";
      return aa;
    }

    C#后台调用前台js代码

    前台js
    <script type="text/javascript" language="javascript">
      function Ceshi()
      {
        var a = "你们好啊!"
        alert(a);
      }
    </script>
    <asp:Button ID="Button1" runat="server" Text="后台调用js" 
    onclick="Button1_Click" />
    后台代码

    protected void Button1_Click(object sender, EventArgs e)     {

        //如果有UpdatePanel就用如下代码调用前台js

        ScriptManager.RegisterStartupScript(UpdatePanel1,

    this.Page.GetType(), "", "Ceshi();", true);

        //如果没有就如下代码

        this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "Ceshi();", true);

  • 相关阅读:
    使用shutdown命令实现局域网内远程关机、重启整蛊他人
    在foxmail和outlook中设置QQ邮箱、gmail邮箱、新浪邮箱、微软邮箱、网易邮箱等的方法
    万能驱动助理篡改主页为2345的解决办法
    巧用UserAgent来解决浏览器的各种问题
    各大浏览器保存密码的文件
    使用代理软件之后其他软件不能联网的解决方法
    windows xp/7/8/8.1/10安全模式详解和系统修复讲解
    VirtualBox更改默认路径
    Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法
    xampp打开显示缺少运行库的解决方法
  • 原文地址:https://www.cnblogs.com/qingsister/p/4495315.html
Copyright © 2020-2023  润新知