最近一直在做一个电话拨号的系统,系统不大,但是做的时间有点长了。其中用到了一个技术:js调用后台方法。解决这个问题花了不少时间,现如今仍然还有些不明白的地方,今天跟大家分享一下。真正明白的同学欢迎指正。

  ajaxPro.dll基础教程(前台调用后台方法,后台调用前台方法)       

  ajaxPro.dll基础教程(前台调用后台方法,后台调用前台方法)       

  1. javaScript函数中执行C#代码中的函数:
    方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;
           
    2、在前台写一个js函数,内容为document.getElementByIdx_xx(“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 type=”button” 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> www.2cto.com
    <INPUT type=”text”>
    <input type=”hidden” > 〈!–用来存储你要调用的函数 –〉
    在.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 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
    4.如何在C#中访问JavaScript函数?
    答案如下:
    c#代码中执行javaScript函数:
    方法一:1、Page.RegisterStartupScript(“ggg”,”
    <script>SetVisible(1); </script>”);
    方法二:使用Literal类,然后
    private void Button2_Click(object sender, System.EventArgs e)
    {
    string str;
    str=” <script language=’javascript’>”;
    str+=”selectRange()”;
    str+=” </script>”;
    //Literal1.Visible=true;
    Literal1.Text=str;
    }

js调用后台,后台调用前台等方法总结

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

alert(a);

</script>

方法三:1、 <script language=javascript>

</script>

方法四: <script language=javascript>

function SubmitKeyClick()

{

if (event.keyCode == 13)

{

event.cancelBubble = true;

event.returnValue = false;

document.all.FunName.value=你要调用的函数名;

document.form[0].submit();

}

}

</script>

〈!–用来存储你要调用的函数 –〉

在.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、通过页面上隐藏域访问

方法二: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

4.如何在C#中访问JavaScript函数?

答案如下:

c#代码中执行javaScript函数:

方法一:1、Page.RegisterStartupScript(ggg, <script>SetVisible(1);
</script>);

方法二:使用Literal类,然后

private void Button2_Click(object sender, System.EventArgs e)

{

string str;

str= <script language=’javascript’>;

str+=selectRange();

str+= </script>;

//Literal1.Visible=true;

Literal1.Text=str;

}

 

1.
javaScript函数中执行C#代码中的函数:
方法一:1、首先建立一个按钮,在后台将调用或处理的内容…

 

  1. javaScript函数中执行C#代码中的函数:
  1. javaScript函数中执行C#代码中的函数:

摘自 网络世界无中生有

 

方法一:间接触发后台代码

方法一:间接触发后台代码

. javaScript函数中执行C#代码中的函数:
方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;
2、在前台写一个js函数…

 

       
1、首先建立一个服务端控件按钮命名为btn1,双击进入后台将调用或处理的内容写入btn1_click中;  

       
1、首先建立一个服务端控件按钮命名为btn1,双击进入后台将调用或处理的内容写入btn1_click中;  

     
其实,在vs里面,这种前台调用后台方法还是很常见的,只不过是被vs封装了。

       
2、在前台写一个js函数,内容为document.getElementByIdx(“btn1”).click();

       
2、在前台写一个js函数,内容为document.getElementByIdx(“btn1”).click();

 

        3、在前台调用js函数,激发click事件,等于访问后台c#函数;

        3、在前台调用js函数,激发click事件,等于访问后台c#函数;

 

        代码如下:

        代码如下:

 

<input id=”hBt” type=”button” value=”CLICK ME2″ onclick=”fun2()”
/>

<input id=”hBt” type=”button” value=”CLICK ME2″ onclick=”fun2()”
/>

     
我们在界面拖一个button,双击后,vs会自动为在前台调用这个button的Click事件,同时在后台生成好这个button的Click方法。

<asp:Button ID=”aBt” runat=”server” Text=”server BT”
OnClick=”aBt_Click” />

<asp:Button ID=”aBt” runat=”server” Text=”server BT”
OnClick=”aBt_Click” />

 

<asp:Label ID=”Label1″ runat=”server”
Text=”Label”></asp:Label>

当点击服务器端按钮的时候 给lable赋值

<asp:Label ID=”Label1″ runat=”server”
Text=”Label”></asp:Label>

当点击服务器端按钮的时候 给lable赋值

 

protected void aBt_Click(object sender, EventArgs e)    

protected void aBt_Click(object sender, EventArgs e)    

 

{         Label1.Text = ” 真的 假的~~~”;     }

{         Label1.Text = ” 真的 假的~~~”;     }

      或者说我们不用vs替我们办这些,我们自己来写,方法当然也很简单:

js代码如下:

js代码如下:

 

function fun2() {     

function fun2() {     

在前台在建立一个按钮,在后台将调用或处理的内容写入button_click中;然后在前台写一个js函数,内容为document.getElementById(“btn1”).click();
最后在前台或后台调用js函数,激发click事件,等于访问后台c#函数。

  document.getElementById(‘aBt’).click();

  document.getElementById(‘aBt’).click();

 

}

}

我们遇到的都不是上面的情况,而是类似于下面的这种方法:

  

  

 

方法二:1、函数声明为public            

方法二:1、函数声明为public            

 

          后台代码(把public改成protected也可以)

          后台代码(把public改成protected也可以)

 

          public string ss()

          public string ss()

      后台方法:

          {

          {

 

              return(“a”);

              return(“a”);

[csharp] 

          }//

          }//

public string receiveCall(string strNum)  

        2、在html里用 <%=fucntion()%>可以调用

        2、在html里用 <%=fucntion()%>可以调用

{  

          前台脚本

          前台脚本

   strNum = “小明” + strNum;  

          <script language=javascript>

          <script language=javascript>

   return strNum;   

          var a = ” <%=ss()%>”;

          var a = ” <%=ss()%>”;

}  

          alert(a);

          alert(a);

 

          </script>

          </script>

public string receiveCall(string strNum)

       有参数的形式

       有参数的形式

{

如图所示 都是html控件 输入姓名 点击按钮获取您输入的信息!

如图所示 都是html控件 输入姓名 点击按钮获取您输入的信息!

   strNum = “小明” + strNum;

图片 1
代码如下:
<div>
            Your Name is:<input id=”name” type=”text” /> 

图片 2
代码如下:
<div>
            Your Name is:<input id=”name” type=”text” /> 

   return strNum; 

           <input id=”clickBt” type=”button” value=”GET NAME”
onclick=”fun()” />
            <input id=”nameTxt” type=”text” />
</div>

js如下:
**<script 
language=”javascript” type=”text/javascript”>
 function fun()
  {
            var name = document.getElementById(‘name’).value;
            var nameStr = 
‘<%=getName(“‘+name+'”)
%>’;页面在第一次加载的时候,由于页面的执行顺序,运行到这里的时候回以
‘ + name + ‘的值传到后台,但不真正的执行后台方法
            
document.getElementById(‘nameTxt’).value = nameStr;
        }
    
</script>

           <input id=”clickBt” type=”button” value=”GET NAME”
onclick=”fun()” />
            <input id=”nameTxt” type=”text” />
</div>

js如下:
**<script
language=”javascript” type=”text/javascript”>
 function fun()
  {
            var name = document.getElementById(‘name’).value;
            var nameStr =
‘<%=getName(“‘+name+'”)
%>’;页面在第一次加载的时候,由于页面的执行顺序,运行到这里的时候回以
‘ + name + ‘的值传到后台,但不真正的执行后台方法
           
document.getElementById(‘nameTxt’).value = nameStr;
        }
   
</script>

}

后台代码如下: public string getName(string namePar)
    {
        return namePar + ” is your name”;
    }
**方法三:1、 <script language=”javascript”>

后台代码如下: public string getName(string namePar)
    {
        return namePar + ” is your name”;
    }
**方法三:1、 <script language=”javascript”>

 

          <!–

          <!–

      前台js方法:

          function __doPostBack(eventTarget, eventArgument)

          function __doPostBack(eventTarget, eventArgument)

 

          {

          {

[html]  

              var theForm = document.Form1;    //指runat=server的form

              var theForm = document.Form1;    //指runat=server的form

function Init()  

              theForm.__EVENTTARGET.value = eventTarget;

              theForm.__EVENTTARGET.value = eventTarget;

{  

              theFrom.__EVENTARGUMENT.value = eventArgument;

              theFrom.__EVENTARGUMENT.value = eventArgument;

  var v = “来电”;  

              theForm.submit();

              theForm.submit();

  var s = ‘<%=receiveCall(“‘+v+'”) %>’;  

          }

          }

  alert(s);  

          –>

          –>

}  

          </script>

          </script>

 

          <input type=”button” value=”按钮” >

          <input type=”button” value=”按钮” >

 function Init()

      

      

 {

方法四: <script language=”javascript”>

方法四: <script language=”javascript”>

   var v = “来电”;

function SubmitKeyClick()

function SubmitKeyClick()

   var s = ‘<%=receiveCall(“‘+v+'”) %>’;

{

{

   alert(s);

    if (event.keyCode == 13)

    if (event.keyCode == 13)

 }

    {

    {

然后在前台调用就可以了。

        event.cancelBubble = true;

        event.cancelBubble = true;

 

        event.returnValue = false;

        event.returnValue = false;

 

        document.all.FunName.value=”你要调用的函数名”;

        document.all.FunName.value=”你要调用的函数名”;

 

        document.form[0].submit();

        document.form[0].submit();

     
我最初写这个方法的时候,程序总是出错。前台在js方法里面写好了调用后台的方法,但是没有调用,结果它仍然会执行。有时候错误出的甚至有点莫名其妙。一会儿能调用一会儿不能调用。

    }

    }

 

}

}

 

</script>

</script>

 

<INPUT type=”text”>

<INPUT type=”text”>

     
后来在网上找了半天,看见很多人都将后台方法写成protected,然后我照做了,将Demo里面的后台方法改成protected类型,程序果然就ok了,再没有出现过类似上面的问题。然后我以为找到答案了,可是在系统里面的问题仍然没有解决。

<input type=”hidden” > 〈!–用来存储你要调用的函数 –〉

<input type=”hidden” > 〈!–用来存储你要调用的函数 –〉

 

在.CS里有:

在.CS里有:

 

public Page_OnLoad()

public Page_OnLoad()

 

{

{

     
电话系统里面仍然会出现未调用后台方法,而自己调用的情况。而且这种情况非常不稳定。一些地方未调用执行,一些地方未调用不执行。这个问题我们的解决办法就是将未调用执行的部分去掉,换成用vs里面的AJAX方法实现(牛腩里面讲过,一直没用过,准备下篇博客介绍给大家)。

if (!Page.IsPost())

if (!Page.IsPost())

 

{

{

 

string
strFunName=Request.Form[“FunName”]!=null?Request.Form[“FunName”]:””;

string
strFunName=Request.Form[“FunName”]!=null?Request.Form[“FunName”]:””;

 

//根据传回来的值决定调用哪个函数

//根据传回来的值决定调用哪个函数

      这个为问题貌似是解决了,但是新问题有出现了。先看下面图片:

switch(strFunName)

switch(strFunName)

 

{

{

图片 3

case “enter()”:

case “enter()”:

 

enter() ; //调用该函数

enter() ; //调用该函数

 

break;

break;

 

case “其他”:

case “其他”:

 

//调用其他函数

//调用其他函数

 

break;

break;

     
问题出来了:每当鼠标划到图中[联系我]的时候,弹出框中每次显示的电话号码都是一样的。也就是说,当你划到另一个[联系我]的时候,弹出框的电话号码跟上一次相同。

default:

default:

 

//调用默认函数

//调用默认函数

   

break;

break;

 

}

}

      分析之后得出结论:

}

}

 

}

}

 

public void enter()

public void enter()

 

{

{

     
1、在没有使用js调用后台方法的时候,弹出框显示的信息是正常的;在使用js调用后台方法之后,会出现该问题;

//……比如计算某值

//……比如计算某值

 

}

}

 

2.如何在JavaScript访问C#变量?

2.如何在JavaScript访问C#变量?

 

答案如下:

答案如下:

      2、弹出框显示的信息也有规律,每次显示的值是后台默认绑定的值。

方法一:1、通过页面上隐藏域访问 <input type=”hidden”
runat=”server”>

方法一:1、通过页面上隐藏域访问 <input type=”hidden”
runat=”server”>

 

方法二:1、如后台定义了PUBLIC STRING N;前台js中引用该变量的格式为’
<%=n%>’或”+ <%=n%>+”

方法二:1、如后台定义了PUBLIC STRING N;前台js中引用该变量的格式为’
<%=n%>’或”+ <%=n%>+”

 

方法三:1、或者你可以在服务器端变量赋值后在页面注册一段脚本

方法三:1、或者你可以在服务器端变量赋值后在页面注册一段脚本

 

          ” <script language=’javascript’>var temp=” + tmp + ”
</script>”

          ” <script language=’javascript’>var temp=” + tmp + ”
</script>”

     
也就是说,上面所说的问题其实并没有解决。在js方法中,在没有调用的情况下,还是偷偷执行了后台方法,而且尽管代码写的是动态绑定,而执行的后台方法却像是变成了一个常量,每次调用,都只执行默认绑定。

          tmp是后台变量,然后js中可以直接访问temp获得值。

          tmp是后台变量,然后js中可以直接访问temp获得值。

 

3.如何在C#中访问JavaScript的已有变量?

3.如何在C#中访问JavaScript的已有变量?

 

答案如下:

答案如下:

 

方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;

方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;

     
问题分析到这里,也就快结局了。其实之所以会出现这种问题,是跟页面的加载原理有关。由于js是在客户端运行的,页面加载完html页面后,仍然会加载js代码,当加载到调用后台方法部分的时候,就会对后台方法进行调用,也就出现了上面发生的问题。试验一下也能证明,<%=receiveCall()%>在页面绑定的时候就会计算值。加个断点调试一下,结果是,只有在页面刷新时,才会就算<%=receiveCall()%>的值。

        2、后台用request[“id”]来获取值;

        2、后台用request[“id”]来获取值;

 

方法二:可以用cookie或session

方法二:可以用cookie或session

 

4.如何在C#中访问JavaScript函数?

4.如何在C#中访问JavaScript函数?

 

答案如下:

答案如下:

     
如果要在页面刷新时执行某个函数时用这个方法还可以,也就是说使用autopostback,而这里这么用是多此一举。另外,js解释执行的时候,<%=receiveCall()%>已经赋值,可以看作是常量,因此这时的值不是想象中触发后才执行后台事件。

c#代码中执行javaScript函数:

c#代码中执行javaScript函数:

 

方法一:1、Page.RegisterStartupScript(“ggg”,”
<script>SetVisible(1); </script>”);

方法一:1、Page.RegisterStartupScript(“ggg”,”
<script>SetVisible(1); </script>”);

 

方法二:使用Literal类,然后

方法二:使用Literal类,然后

 

private void Button2_Click(object sender, System.EventArgs e)

private void Button2_Click(object sender, System.EventArgs e)

     
到现在问题已经介绍清楚了,依上面所述,类似于<%=receiveCall()%>这样的调用方式,其实也说不上错误。想要正确的使用它,你需要了解页面的加载原理,能够容忍执行的后台方法变成一个常量,你也就可以使用它了。

{

{

 

string str;

string str;

 

str=” <script language=’javascript’>”;

str=” <script language=’javascript’>”;

 

str+=”selectRange()”;

str+=”selectRange()”;

     
本文通过项目中遇到的js调用后台方法的问题,进行了简要的介绍与讲解。有些地方说的也不是很明白,希望大家拍砖斧正。

str+=” </script>”;

str+=” </script>”;

 

//Literal1.Visible=true;

//Literal1.Visible=true;

Literal1.Text=str;

Literal1.Text=str;

}

}

原文来自:

原文来自:

 

 

客户端如何获取ASP.net服务器控件ID

分类:C# 在ASP.NET中服务器控件的ID在客户端会发生一定的变化。如何利用document.getElementById()来获取控件中的值成为了一个难题。比如:在一个登录页面里面放入一个帐号输入框,一个密码输入框,一个提交按钮

<asp:TextBox ID=”TextBox_Uid” runat=”server” MaxLength=”20″
></asp:TextBox>

<asp:TextBox ID=”TextBox_Pwd1″ runat=”server” MaxLength=”20″
TextMode=”Password”></asp:TextBox>

<asp:Button ID=”Button_Login” runat=”server” Text=”登录”
OnClick=”Button_Login_Click” OnClientClick=”return CheckReg()” />

 

 如何准确获取服务器控件的ID?请看下面:使用<%=控件ID.ClientID%>

为了减少输入的频繁提交。我在客户端写入一个Javascript方法,简单判断输入的值是否符合要求。如果账号和密码输入不为空,我就提交到后台进行判断。
控件TextBox的ID为TextBox_Uid和TextBox_Pwd1但是在客户端竟然变成了ctl00_TextBox_User和ctl00_TextBox_Pwd。

<script language=”javascript” type=”text/javascript”>

//检查账号、密码是否为空

function CheckReg()

{

var uid = document.getElementById(“<%=TextBox_Uid.ClientID
%>”).value;

var pwd1 = document.getElementById(“<%=TextBox_Pwd1.ClientID
%>”).value;

if(uid == “” || pwd1 == “”)

{

alert(“账号和密码不能为空!”);

return false;

}

return true;

}

</script>

 

转自:

客户端如何获取ASP.net服务器控件ID

分类:C#
在ASP.NET中服务器控件的ID在客户端会发生一定的变化。如何利用document.getElementById()来获取控件中的值成为了一个难题。比如:在一个登录页面里面放入一个帐号输入框,一个密码输入框,一个提交按钮

<asp:TextBox ID=”TextBox_Uid” runat=”server” MaxLength=”20″
></asp:TextBox>

<asp:TextBox ID=”TextBox_Pwd1″ runat=”server” MaxLength=”20″
TextMode=”Password”></asp:TextBox>

<asp:Button ID=”Button_Login” runat=”server” Text=”登录”
OnClick=”Button_Login_Click” OnClientClick=”return CheckReg()” />

 

 如何准确获取服务器控件的ID?请看下面:使用<%=控件ID.ClientID%>

为了减少输入的频繁提交。我在客户端写入一个Javascript方法,简单判断输入的值是否符合要求。如果账号和密码输入不为空,我就提交到后台进行判断。
控件TextBox的ID为TextBox_Uid和TextBox_Pwd1但是在客户端竟然变成了ctl00_TextBox_User和ctl00_TextBox_Pwd。

<script language=”javascript” type=”text/javascript”>

//检查账号、密码是否为空

function CheckReg()

{

var uid = document.getElementById(“<%=TextBox_Uid.ClientID
%>”).value;

var pwd1 = document.getElementById(“<%=TextBox_Pwd1.ClientID
%>”).value;

if(uid == “” || pwd1 == “”)

{

alert(“账号和密码不能为空!”);

return false;

}

return true;

}

</script>

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图