问题描述: 
      通过winform调用js  而我在js中写了一个函数 比如 function aa(bb) 
                                                              { 
                                                                alert(typeof(bb)) 
                                                              } 
而我在winform中调用js aa函数时给bb参数传入的类型是winform中datatable类型,然而在执行弹出对话框时的结果是js不能识别的类型,本人在网上搜索了很多相关方面的资料都未解决该问题。望有人帮忙解决,在此对帮忙解决问题的人士致敬! 

解决方案 »

  1.   

    http://topic.csdn.net/u/20080827/12/9b9553b5-323a-4bc5-8497-95306030b146.html
      

  2.   

    http://hi.baidu.com/zhangfengbang/blog/item/9b144cd3860dbf043bf3cf77.html
      

  3.   

    我在说明下  我的是winform程序c/s版的
      

  4.   

    用WebBrowser控件可以做到。
    WebBrowser.ObjectForScripting 属性:取或设置一个对象,该对象可由显示在 WebBrowser 控件中的网页所包含的脚本代码访问。
    使用该属性启用 WebBrowser 控件承载的网页与包含 WebBrowser 控件的应用程序之间的通信。使用该属性可以将动态 HTML (DHTML) 代码与客户端应用程序代码集成在一起。为该属性指定的对象可作为 window.external 对象(用于主机访问的内置 DOM 对象)用于网页脚本。可以将此属性设置为希望其公共属性和方法可用于脚本代码的任何 COM 可见的对象。可以通过使用 ComVisibleAttribute 对类进行标记使其成为 COM 可见的类。若要从客户端应用程序代码调用网页中定义的函数,请使用可从 Document 属性检索的 HtmlDocument 对象的 HtmlDocument.InvokeScript 方法。
      

  5.   

    下面的代码示例演示如何使用 ObjectForScripting 属性。在该示例中,ObjectForScripting 属性被设置为当前窗体。using System;
    using System.Windows.Forms;
    using System.Security.Permissions;[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public class Form1 : Form
    {
        private WebBrowser webBrowser1 = new WebBrowser();
        private Button button1 = new Button();    [STAThread]
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }    public Form1()
        {
            button1.Text = "call script code from client code";
            button1.Dock = DockStyle.Top;
            button1.Click += new EventHandler(button1_Click);
            webBrowser1.Dock = DockStyle.Fill;
            Controls.Add(webBrowser1);
            Controls.Add(button1);
            Load += new EventHandler(Form1_Load);
        }    private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.AllowWebBrowserDrop = false;
            webBrowser1.IsWebBrowserContextMenuEnabled = false;
            webBrowser1.WebBrowserShortcutsEnabled = false;
            webBrowser1.ObjectForScripting = this;
            // Uncomment the following line when you are finished debugging.
            //webBrowser1.ScriptErrorsSuppressed = true;        webBrowser1.DocumentText =
                "<html><head><script>" +
                "function test(message) { alert(message); }" +
                "</script></head><body><button " +
                "onclick=\"window.external.Test('called from script code')\">" +
                "call client code from script code</button>" +
                "</body></html>";
        }    public void Test(String message)
        {
            MessageBox.Show(message, "client code");
        }    private void button1_Click(object sender, EventArgs e)
        {
            webBrowser1.Document.InvokeScript("test",
                new String[] { "called from client code" });
        }}
      

  6.   


    那我像说的是  如果我给js传入的是datatable类型的呢?  为什么在我这边是错误的呢?  难道还需要做什么操作么?
      

  7.   

    个人认为js不能直接解析后置代码中的对象,必须要将对象转换为json或table,或按照自己的格式输出到前端,才能解析
      

  8.   

    js 无法传Datatable类型,json还差不多,js是前台脚本怎么可能接受能了DataTable这种后台.net的类型呢,完全就是两个不同的世界,不可能用同一种语言交流的,真是晕~!