c#与javascript

一、c#调用javascript

第一种,OnClientClick    (vs2003不支持这个方法)

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="client_click()" OnClick="Button1_Click" />

client_click() 就是javascript的一个方法。

第二种,Button1.Attributes.Add("onclick", "return Client_Click()");

“Client_Click() “是一个前台方法,可以替换成一般的脚本如:retrun confirm('确定删除吗?')

第三种,ClientScript.RegisterStartupScript,比较好点。

例子:StringBuilder sb = new StringBuilder();

        sb.Append("<script language='javascript'>");

        sb.Append("Button2_onclick('" + serverPath + "')");

        sb.Append("</script>");

        ClientScript.RegisterStartupScript(this.GetType(), "LoadPicScript", sb.ToString());

第四种. 用Response.Write方法写入脚本

比如在你单击按钮后,先操作数据库,完了后显示已经完成,可以在最后想调用的地方写上

Response.Write("<script type='text/javascript'>alert();</script>");

这个方法有个缺陷就是不能调用脚本文件中的自定义的函数,只能调用内部函数,具体调用自定义的函数只能在Response.Write写上函数定义,比如Response.Write("<script type='text/javascript'>function myfun(){...}</script>");

第五种 用ClientScript类动态添加脚本

    用法如下:在想调用某个javascript脚本函数的地方添加代码,注意要保证MyFun已经在脚本文件中定义过了。

    ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>MyFun();</script>");

这个方法比Response.Write更方便一些,可以直接调用脚本文件中的自定义函数。

可以在程序的任何地方执行,o(∩_∩)o...,是不是很好用呢

注意执行顺序:先执行Client ,再执行Server

二、javascript调用c#

 第一种情况:
1.后台方法:
protected string CsharpVoid(string strCC)  
{  
    return strCC;  

protected string CsharpVoid(string strCC)
{
    return strCC;
}
2.javascript 调用
<script language="javascript">  
<!--  
var s = "<%=CsharpVoid("www. baidu.com")%>";     
document.write(s);  
// -->  
</script> 
<script language="javascript">
<!--
var s = "<%=CsharpVoid("www. baidu.com")%>";  
document.write(s);
// -->
</script>
// 第二种情况:
1.后代码:
protected void CsharpVoid()  
  {  
    string strCC = "www.baidu.com";  
    Response.Write(strCC);  
  } 
protected void CsharpVoid()
  {
    string strCC = "www.baidu.com";
    Response.Write(strCC);
  }
2.调用方法:CsharpVoid()
<script language="javascript"> 
<!--  
document.write("<%CsharpVoid();%>");  
// --> 
</script> 
<script language="javascript">
<!--
document.write("<%CsharpVoid();%>");
// -->
</script>
可在页面中放一个按钮,把它设置为不可见style="display:none",然后,用脚本让此按钮点击
document.all("button1").click();  
document.all("button1").click();
在此按钮的C#后台中写事件代码,这就是最简单的脚本调用C#方法.


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wonsoft/archive/2008/06/29/2595743.aspx

方法一:
1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;
2、在前台写一个js函数,内容为
view plaincopy to clipboardprint?
document.getElementById("btn1").click(); 
document.getElementById("btn1").click();
3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;
方法二:

1、后台代码函数声明为public(protected也可以)
public string ss()  
{  
        return("a");  

public string ss()
{
        return("a");
}
2、前台:在html脚本里用<%=fucntion()%>可以调用
<script language=javascript> 
<!--  
             var a = "<%=ss()%>";  
             alert(a);  
// --> 
</script> 
<script language=javascript>
<!--
             var a = "<%=ss()%>";
             alert(a);
// -->
</script>
方法三:
<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 __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','')"/>
ASPX页面有包含asp:LinkButton或者带有AutoPostBack属性且其值为true的服务器控件时,ASP.NET会自动为页面生成下面的脚本:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />   
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
这两个参数分别由隐藏的两个表单域__ EVENTTARGET和__ EVENTARGUMENT保存。
这两个隐藏的表单可以查找引起页面回送的控件ID和回送时的参数:
string target = Request.Params["__EVENTTARGET"];   
string args = Request.Params["__EVENTARGUMENT"]; 
string target = Request.Params["__EVENTTARGET"];
string args = Request.Params["__EVENTARGUMENT"];
asp:Button和asp:ImageButton不是使用__doPostBack回送页面,所以使用这两个控件回送页面时,上面的代码是无效的。
方法四:1、前台:
<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"><!--用来存储你要调用的函数 --> 
<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"><!--用来存储你要调用的函数 -->
2、后台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()  
{  
  //……比如计算某值  

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 id="xx" type="hidden" runat="server"> 
<input id="xx" type="hidden" runat="server">
方法二:

1、如后台定义了:

public string n; 
public string n;
2、前台js中引用该变量的格式为

view plaincopy to clipboardprint?
'<%=n%>' 
//或  
"+<%=n%>+" 
//例:  
var ss="<%=n%>" 
'<%=n%>'
//或
"+<%=n%>+"
//例:
var ss="<%=n%>"
 
方法三:在服务器端变量赋值后在页面注册一段脚本
view plaincopy to clipboardprint?
"<script language='javascript'>var temp=" + tmp + "</script>" 
"<script language='javascript'>var temp=" + tmp + "</script>"
tmp是后台变量,然后js中可以直接访问temp获得值。

问题3:在C#中访问JavaScript的已有变量
方法一:
1、前台使用静态文本控件隐藏域,将js变量值写入其中;
2、后台用request["id"]来获取值;
方法二:
可以用cookie或session问题4:在C#中访问JavaScript函数
方法一:
view plaincopy to clipboardprint?
Page.RegisterStartupScript("ggg","<script>SetVisible(1);  
</script>"); 
Page.RegisterStartupScript("ggg","<script>SetVisible(1);
</script>");
方法二:
1、前台使用Literal类:
view plaincopy to clipboardprint?
<asp:Literal ID="Literal1" runat="server"></asp:Literal> 
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
2、后台CS代码:
view plaincopy to clipboardprint?
private void Button2_Click(object sender, System.EventArgs e)  
{  
  string str;  
  str="<mce:script language='javascript'><!--  
";  
  str+="selectRange()";  
  str+="  
// --></mce:script>";  
  //Literal1.Visible=true;  
  Literal1.Text=str;  
}  

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wonsoft/archive/2008/06/29/2595743.aspx

原文地址:https://www.cnblogs.com/jinyuttt/p/1957822.html