需求:
比如一个项目用到了汉语拼音的JS库,C# 在处理转拼音这一块上为了和前端保持结果一致,最有效 的办法,就是直接使用前端的这个汉语拼音的JS库.
那么此时,我们把这样的一个汉语拼音的JS库称之为需要交互的库,也就是前端 后端都需要用到.
解决方法
使用MSScriptControl.ScriptControl组件,这是是C#语言提供的一个COM组件,用来与脚本语言交互执行,支持JScript、VBScript、javascript语言。
![204c505c69839224dce05c9d5238c2e3.png](https://img-blog.csdnimg.cn/img_convert/204c505c69839224dce05c9d5238c2e3.png)
项目添加引用
后端使用
/// /// C#中直接调用js方法 获取拼音 RadiotherapyPlatform/js/Main/pinyin.js /// 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; } /// /// 执行JS /// /// 参数体 /// JavaScript代码的字符串 /// 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; }
/// /// C#中直接调用js方法 获取拼音 RadiotherapyPlatform/js/Main/pinyin.js /// 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; } /// /// 执行JS /// /// 参数体 /// JavaScript代码的字符串 /// 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没有注册类的的问题
![86258a65d96bd7b052f36e42ab54f91a.png](https://img-blog.csdnimg.cn/img_convert/86258a65d96bd7b052f36e42ab54f91a.png)