龙空技术网

C#后台中直接调用js方法

媒体专属号 148

前言:

今天各位老铁们对“怎么调用js方法调用”大致比较关切,我们都想要分析一些“怎么调用js方法调用”的相关知识。那么小编在网摘上搜集了一些对于“怎么调用js方法调用””的相关知识,希望你们能喜欢,小伙伴们快快来了解一下吧!

需求:

比如一个项目用到了汉语拼音的JS库,C# 在处理转拼音这一块上为了和前端保持结果一致,最有效 的办法,就是直接使用前端的这个汉语拼音的JS库.

那么此时,我们把这样的一个汉语拼音的JS库称之为需要交互的库,也就是前端 后端都需要用到.

解决方法

使用MSScriptControl.ScriptControl组件,这是是C#语言提供的一个COM组件,用来与脚本语言交互执行,支持JScript、VBScript、javascript语言。

项目添加引用

后端使用

/// <summary>    /// C#中直接调用js方法 获取拼音 RadiotherapyPlatform/js/Main/pinyin.js    /// </summary>    private  string GetSpellCode(string CnStr)    {        string strTemp = "";        try        {            string path = AppDomain.CurrentDomain.BaseDirectory + "js/Main/pinyin.js";            string str2 = File.ReadAllText(path);            string fun = string.Format(@"pinyin.getFullChars('{0}')", CnStr);            strTemp = ExecuteScript(fun, str2);        }        catch (Exception ex)        {            string str = ex.Message;        }        return strTemp;    }    /// <summary>    /// 执行JS    /// </summary>    /// <param name="sExpression">参数体</param>    /// <param name="sCode">JavaScript代码的字符串</param>    /// <returns></returns>    private string ExecuteScript(string sExpression, string sCode)    {        MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();        scriptControl.UseSafeSubset = true;        scriptControl.Language = "JScript";        scriptControl.AddCode(sCode);        try        {            string str = scriptControl.Eval(sExpression).ToString();            return str;        }        catch (Exception ex)        {            string str = ex.Message;        }        return null;    }

/// <summary>    /// C#中直接调用js方法 获取拼音 RadiotherapyPlatform/js/Main/pinyin.js    /// </summary>    private  string GetSpellCode(string CnStr)    {        string strTemp = "";        try        {            string path = AppDomain.CurrentDomain.BaseDirectory + "js/Main/pinyin.js";            string str2 = File.ReadAllText(path);            string fun = string.Format(@"pinyin.getFullChars('{0}')", CnStr);            strTemp = ExecuteScript(fun, str2);        }        catch (Exception ex)        {            string str = ex.Message;        }        return strTemp;    }    /// <summary>    /// 执行JS    /// </summary>    /// <param name="sExpression">参数体</param>    /// <param name="sCode">JavaScript代码的字符串</param>    /// <returns></returns>    private string ExecuteScript(string sExpression, string sCode)    {        MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();        scriptControl.UseSafeSubset = true;        scriptControl.Language = "JScript";        scriptControl.AddCode(sCode);        try        {            string str = scriptControl.Eval(sExpression).ToString();            return str;        }        catch (Exception ex)        {            string str = ex.Message;        }        return null;    }

这样我们就实现了在后端使用汉语拼音的JS库了

前端使用

pinyin.getFullChars($(this).val());

至此,我们就完成了这样一个交互库的两端调用.

其实也还有其他几种方式可以实现这一需求,可以使用webBrowser,先去加载页面,再去触发js

this.webBrowser1.Navigate("test.html");//浏览顺加载网页 this.webBrowser1.Document.InvokeScript("js方法名称","传给js方法的值");//执行js方法

亦或者

RegisterStartupScript回发机制

发布的时候记得服务器iis开启,否则会报80040154没有注册类的的问题

标签: #怎么调用js方法调用