如何从JavaScript调用C#方法并传入JavaScript变量作为参数
解决JavaScript调用C#方法并传入JS变量的问题
首先得明确核心逻辑:C#是服务器端代码,在页面发送给浏览器前就执行完毕;JavaScript是客户端代码,在浏览器里才运行。你之前的写法都是试图在服务器渲染阶段引用还没生成的客户端JS变量,这肯定行不通,因为此时GroupCode根本没有值。
正确的做法是通过客户端向服务器发起请求,把JS变量的值传递过去,再调用C#方法。下面分两种常见场景给出具体实现:
场景1:ASP.NET WebForms(WebMethod)
1. 后台C#代码(写在.aspx页面后台类或单独类中)
using System.Web.Services; public class Tool { [WebMethod] // 必须添加该特性,标记为可通过AJAX调用的方法 public static string GetValue(string groupCode) { // 这里编写业务逻辑,比如根据groupCode返回对应值 return $"针对{groupCode}的处理结果"; } }
2. 前端JavaScript代码(使用jQuery AJAX)
// 你的JavaScript变量 var GroupCode = "G001"; // 发起AJAX请求调用C#方法 $.ajax({ type: "POST", url: "YourPage.aspx/GetValue", // 替换为你的.aspx页面路径 data: JSON.stringify({ groupCode: GroupCode }), // 将JS变量转为JSON格式传参 contentType: "application/json; charset=utf-8", dataType: "json", success: function(response) { // ASP.NET WebMethod的返回结果在response.d属性中 var value = response.d; console.log("获取到的结果:", value); // 此处可对value进行后续操作 }, error: function(xhr, status, err) { console.error("调用失败:", err); } });
场景2:ASP.NET Core(API控制器)
1. 后台C# API控制器
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/tool")] // 路由前缀 public class ToolController : ControllerBase { [HttpPost("get-value")] // 接口路由 public IActionResult GetValue([FromBody] string groupCode) { // 业务逻辑处理 var result = $"处理后的结果:{groupCode}"; return Ok(result); } }
2. 前端JavaScript代码(使用原生Fetch API)
var GroupCode = "G001"; fetch("/api/tool/get-value", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(GroupCode) }) .then(response => response.text()) .then(data => { var value = data; console.log("获取到的结果:", value); }) .catch(err => console.error("调用失败:", err));
关键说明
- 不能直接在页面渲染阶段用
@Tool.GetValue(GroupCode)这类写法,因为服务器执行时GroupCode还未在客户端生成,根本拿不到值。 - 必须通过AJAX/Fetch这类客户端请求,把JS变量的值传到服务器,服务器再调用对应的C#方法处理,最后将结果返回给客户端。
内容的提问来源于stack exchange,提问作者Sialok
相关产品推荐
相关产品推荐

