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

如何在MVC Razor网站中从C#设置全局JavaScript变量

问题原因及解决办法

问题根源

单独的.js静态文件不会经过ASP.NET MVC的Razor视图引擎解析,你写的'@Session["apiURL"]'会被直接当作普通字符串输出,不会被替换成Session中存储的实际URL。Razor语法仅在.cshtml文件(视图页、布局页等)里才会被引擎处理解析。

可行解决方法

方法一:在.cshtml页面注入全局变量

在布局页(比如_Layout.cshtml)或具体视图页中,添加一个<script>标签用Razor语法把API URL赋值给全局变量,之后在apiCalls.js里直接引用这个变量:

<!-- 在.cshtml文件的<head>或<body>底部添加,确保在apiCalls.js之前加载 -->
<script>
    // 定义全局变量存储API URL
    window.apiBaseUrl = '@Session["apiURL"]';
</script>
<script src="~/js/apiCalls.js"></script>

然后在apiCalls.js中使用:

var api = window.apiBaseUrl;
console.log(api); // 此时会输出实际的URL

方法二:使用HTML元素的data属性传递值

在页面的某个元素(比如<body>)上添加自定义data属性,用Razor赋值后再在js中读取:

<!-- 在.cshtml的<body>标签中添加 -->
<body data-api-url="@Session["apiURL"]">

在apiCalls.js中读取:

var api = document.body.dataset.apiUrl;

方法三:将js文件改为Razor视图(不推荐,仅作参考)

把apiCalls.js重命名为apiCalls.cshtml,在文件顶部添加Razor指令后,就可以在里面使用Razor语法:

@{
    Layout = null; // 禁用布局
}
var api = '@Session["apiURL"]';
// 其他原有js代码...

然后在页面中引用这个cshtml文件:

<script src="~/apiCalls.cshtml"></script>

这种方式不推荐,会把静态js文件变成动态视图,影响缓存和性能。


内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:30:01