js调用后台方法与后台调用js方法

来源:互联网 发布:python 遍历嵌套字典 编辑:程序博客网 时间:2024/04/30 02:38
  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. 简单介绍下它的用法:一.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);

 

原创粉丝点击