JS里调用C#后台方法如何传参数进去?

JavaScript017

JS里调用C#后台方法如何传参数进去?,第1张

通过webBrowser实现C#和javascript互调

实现步骤:

一、新建一个窗体,加入webBrowser控件

控件名:webBrowser1

二、在窗体后台代码加入如下定义

[System.Runtime.InteropServices.ComVisibleAttribute(true)]

public partial class Form1 : Form

{

...

}

三、加载网页

webBrowser1.Navigate(Application.StartupPath + "/UpDateReport.htm")

webBrowser1.ObjectForScripting = this//这句必须,不然js不能调用C#

四、调用脚本方法

/// <summary>

/// 脚本方法

/// </summary>

/// <param name="tag">JS函数名|参数1|参数2</param>

/// <returns></returns>

private object EXEC_JS(System.Windows.Forms.WebBrowser webBrowser, string tag)

{

string[] args = tag.Split('|')

if (args.Length == 1)

{

return webBrowser.Document.InvokeScript(args[0], null)

}

else

{

object[] objects = new object[args.Length - 1]

Array.Copy(args, 1, objects, 0, objects.Length)

return webBrowser.Document.InvokeScript(args[0], objects)

}

}

五、C#调用脚本方法例子,可以有返回值

//JS方法

<script language="javascript">

function js_fun(args)

{

alert("我是通过js脚本弹出的。你输入的内容是:"+args)

return "JAVASCRIPT"

}

</script>

//C#代码

object returnvalue = EXEC_JS(webBrowser1, "js_fun|参数字符串")

MessageBox.Show("js方法返回值是:" + returnvalue.ToString())

六、JS调用C#方法的例子

//C#方法

public string Test(string args)

{

return "你输入的是:"+args

}

//JS代码

<script language="javascript">

window.onload = function()

{

var CS_returnvalue= window.external.Test("aaa")

alert(CS_returnvalue)

}

</script>

你这个是不行的,,我建议你用折中的办法,使用一个隐藏控件传递值,js直接调用后台按钮事件,后台按钮事件获取隐藏控件值,然后调用getdata方法。。

你写的方法问题在于使用了<%

%>,这个东东会在页面加载的时候定死,换句话说,当页面加载完,sum已经不是变量了而是值了

好怪异的思路。ENDTIME来自于id为txtENDTIME的DOM元素的值,作者是想把这个变量传过ASP中getM函数来处理,与的你标题正好相反,哈。"<%=getM("+ENDTIME+")%>"相当于 字符串1+ENDTIME+字符串2。假如这时ENDTIME=1,那么这句合起来就<%getM(ENDTIME)%>。而不是参数变成+ENDTIME+ ,看ASP中代码,也只是想转为字符串。不过很明显这样做是行不通的。这种传递参数的方式实在是异想天开得可笑,而且要把ENDTIME转成字符串直接用js就行了,ENDTIME.toString() 。