在CS(C#)中调用JS(JavaScript)主要有以下几种方式:
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>
感谢您的来访,获取更多精彩文章请收藏本站。
