在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>




















