You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在C#代码中使用JavaScript变量?附相关代码示例

是否可以在C#代码中使用JavaScript变量?

嘿,这个问题问到点子上啦!直接在C#后端代码里用JavaScript变量是行不通的——毕竟C#跑在服务器端,JS跑在浏览器客户端,两者的执行时机和环境完全不搭边。不过咱们可以通过几种方式实现数据的双向传递,让两边能“互通消息”,结合你给出的部门模型和CSHTML代码,我给你唠几个实用方案:

1. 把前端JS变量传给后端C#

如果想让C#拿到JS里的变量,最常用的是通过AJAX请求或者表单提交。比如你页面上的部门下拉框,用户选中后JS拿到ID,再传给后端接口:

前端JS代码

// 获取下拉框选中的部门ID(这就是JS变量)
const selectedDeptId = document.getElementById('Department').value;

// 用Fetch API把数据发给后端C#接口
fetch('/api/Departments/ProcessDept', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ departmentId: selectedDeptId })
})
.then(response => response.json())
.then(result => {
  console.log('后端返回的结果:', result);
});

后端C#接口代码

[ApiController]
[Route("api/[controller]")]
public class DepartmentsController : ControllerBase
{
    private readonly YourDbContext _dbContext;

    public DepartmentsController(YourDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    [HttpPost("ProcessDept")]
    public IActionResult ProcessDepartment([FromBody] int departmentId)
    {
        // 这里就拿到了前端传过来的JS变量值,接下来可以做业务逻辑
        var targetDept = _dbContext.Departments.FirstOrDefault(d => d.Id == departmentId);
        if (targetDept == null)
        {
            return NotFound("部门不存在");
        }
        return Ok($"处理部门: {targetDept.Name}");
    }
}

2. 把后端C#数据传给前端JS

反过来,你也可以在CSHTML里把C#模型的数据注入到JS中,让JS能直接使用这些值。比如把整个部门列表传给JS:

@model List<inspinia.models.Department>

<script>
// 把C#的Model序列化为JSON,注入到JS变量里
const allDepartments = @Html.Raw(Json.Serialize(Model));
// 现在JS就能用这个变量啦,比如打印所有部门名称
allDepartments.forEach(dept => {
  console.log(dept.Name);
});
</script>

<select name="DepartmentId" class="form-control" id="Department">
    @foreach (var item in Model)
    {
        <option value="@item.Id">@item.Name</option>
    }
</select>

这里@Html.Raw(Json.Serialize(Model))会把C#的List转成JS能识别的JSON对象,这样JS里的allDepartments就包含了所有部门数据。

3. 简单值用隐藏字段传递

如果只是传递单个简单值(比如默认部门ID),可以在CSHTML里加个隐藏字段,JS读取它的值:

@model List<inspinia.models.Department>

<!-- 把C#的模型值放到隐藏字段里 -->
<input type="hidden" id="defaultDepartmentId" value="@Model.First().Id" />

<script>
// JS读取隐藏字段的值
const defaultId = document.getElementById('defaultDepartmentId').value;
console.log('默认部门ID:', defaultId);
</script>

总的来说,直接跨环境用变量是不可能的,但通过数据传递的方式,完全能实现C#和JS之间的交互,选哪种方式看你的具体需求就好~

内容的提问来源于stack exchange,提问作者İyad Mansür

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:45:28