当前位置:首页 > 行业动态 > 正文

如何在CS中调用JS?

在C#中调用JavaScript代码,可以通过WebBrowser控件或使用第三方库如CefSharp。以下是一个简单的示例:,,“ csharp,using System;,using System.Windows.Forms;,,public class MyForm : Form,{, private WebBrowser webBrowser;,, public MyForm(), {, webBrowser = new WebBrowser();, webBrowser.Dock = DockStyle.Fill;, this.Controls.Add(webBrowser);, , webBrowser.DocumentCompleted += WebBrowser_DocumentCompleted;, webBrowser.Navigate("about:blank");, },, private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e), {, webBrowser.Document.InvokeScript("eval", new object[] { "alert('Hello from C#');" });, },, [STAThread], public static void Main(), {, Application.EnableVisualStyles();, Application.Run(new MyForm());, },},“,,这个示例展示了如何在C#中使用WebBrowser控件加载一个空白页面,并在页面加载完成后执行JavaScript代码。

在CS(C#)中调用JS(JavaScript)主要有以下几种方式:

如何在CS中调用JS?  第1张

1、通过JavaScript函数调用

在ASP.NET MVC或ASP.NET Core等框架中,最常见的方式是通过JavaScript函数调用来实现与JS的交互,可以在项目中添加一个JavaScript文件,例如创建一个名为script.js的文件,并在其中定义一些函数。

在你的视图文件中引用这个JavaScript文件,如<script src="~/js/script.js"></script>。

在你的控制器或模型中,通过生成包含JavaScript函数调用的HTML代码来实现与JS的交互,在控制器中:

     public ActionResult Index()
     {
         string script = "<script type='text/javascript'>showAlert('Hello from CS file!');</script>";
         ViewBag.Script = script;
         return View();
     }

在视图中渲染传递过来的JavaScript代码,如@Html.Raw(ViewBag.Script)。

2、通过Ajax请求

在控制器中创建一个Action方法,返回JSON数据。

     public JsonResult GetMessage()
     {
         var message = new { Text = "Hello from CS file via Ajax!" };
         return Json(message, JsonRequestBehavior.AllowGet);
     }

在JavaScript文件中编写发送Ajax请求的代码。

     function fetchMessage()
     {
         $.ajax({
             url: '/Home/GetMessage',
             type: 'GET',
             success: function(response)
             {
                 alert(response.Text);
             }
         });
     }

在视图文件中引用JavaScript文件并调用函数。

     <script src="~/js/script.js"></script>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
     <button onclick="fetchMessage()">获取消息</button>

3、通过SignalR

需要安装SignalR的NuGet包,即Install-Package Microsoft.AspNet.SignalR。

在你的Startup类中配置SignalR,即app.MapSignalR();。

创建一个继承自Hub的类,用于处理客户端请求。

     public class MyHub : Hub
     {
         public void SendMessage(string message)
         {
             Clients.All.receiveMessage(message);
         }
     }

在你的JavaScript文件中编写SignalR的客户端代码。

     $(function ()
     {
         var hub = $.connection.myHub;
         hub.client.receiveMessage = function (message)
         {
             alert(message);
         };
         $.connection.hub.start().done(function ()
         {
             $('#sendButton').click(function ()
             {
                 hub.server.sendMessage('Hello from CS file via SignalR!');
             });
         });
     });

4、直接在HTML中嵌入

将JavaScript代码直接写在HTML文件的<script>标签中,这种方式简单直观,但对于大型项目不太实用,因为不利于代码的复用和维护。

     <script>
         alert('Hello, CS Document!');
     </script>

5、通过外部JS文件

将JavaScript代码放在一个单独的文件中,然后在HTML文件中通过<script>标签引入,这样可以提高代码的可维护性和复用性。

     <script src="script.js"></script>

而script.js文件内容可以是:alert('Hello, CS Document!');

6、通过控件的属性和事件

可以通过设置服务器端控件的属性来输出JavaScript代码或函数调用。

     protected void Page_Load(object sender, EventArgs e)
     {
         string ttt = "ttt";
         string js = "<script type='text/javascript'>";
         js += "function istwo(m){alert(m);} </script> ";
         ClientScript.RegisterStartupScript(GetType(), "registerJS", js);
         ClientScript.RegisterStartupScript(GetType(), "runJS", "istwo(" + ttt + ")");
     }

也可以通过为控件添加事件属性来调用JavaScript函数。

     btnPost.Attributes.Add("onclick", "return CheckInput()");

7、通过ASP.NET的ScriptManager控件

在ASP.NET中,可以使用ScriptManager控件来管理和注册脚本,可以在服务器端代码中使用ScriptManager.RegisterStartupScript方法来注册脚本。

     ScriptManager.RegisterStartupScript(this, this.GetType(), "key", "alert('Hello World');", true);

也可以使用ScriptManager.RegisterClientScriptBlock方法来注册脚本块。

     ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key", "function test(){alert('Hello World');}", true);

8、通过Response.Write输出JavaScript代码

可以直接把JavaScript代码当作字符串输出到客户端,让客户端来解释执行。

     Response.Write(" <script>function fun(){alert(" + m + ")} </script>");

或者在页面加载时输出JavaScript代码。

     protected void Page_Load(object sender, EventArgs e)
     {
         Response.Write("<script language='javascript'>alert('Page Loaded');</script>");
     }

9、通过__doPostBack函数

可以在JavaScript中定义一个__doPostBack函数来模拟服务器端的事件触发。

     function __doPostBack(eventTarget, eventArgument)
     {
         var theForm = document.Form1; //指runat=server的form
         theForm.__EVENTTARGET.value = eventTarget;
         theFrom.__EVENTARGUMENT.value = eventArgument;
         theForm.submit();
     }

然后在按钮或其他控件的点击事件中调用这个函数。

     <input id="Button1" type="button" name="Button1" value="按钮" onclick="javascript:__doPostBack('Button1','')">

以下是两个常见问题及解答:

1、如何在C#中调用JavaScript中的函数?

可以通过ClientScript.RegisterStartupScript方法来注册并调用JavaScript中的函数。

     protected void Page_Load(object sender, EventArgs e)
     {
         string js = "<script type='text/javascript'>";
         js += "function istwo(m){alert(m);} </script> ";
         ClientScript.RegisterStartupScript(GetType(), "registerJS", js);
         ClientScript.RegisterStartupScript(GetType(), "runJS", "istwo('Hello from C#')");
     }

这样在页面加载时就会注册并执行JavaScript中的istwo函数。

2、如何在JavaScript中调用C#中的变量或函数?

可以通过在前台页面的JavaScript里写上<%method();%>来调用C#中的函数。

     public void method()
     {
         //执行某些操作...
     }
     <script type="text/javascript">
     <%method();%>
     </script>
0