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

如何在MVC视图脚本中传递Session值?代码问题咨询

解决MVC中Session值传递到前端脚本的问题

嘿,我来帮你搞定这个问题!首先得搞明白为啥你原来的写法行不通:Razor里定义的变量是服务器端在渲染页面时生成的,而JavaScript是客户端浏览器里执行的,俩不在同一个运行环境,直接用this.x肯定拿不到值。下面给你几个靠谱的解决办法:

方法1:直接在脚本里输出Razor表达式

这是最直接的方式,把Session值通过Razor语法直接输出成JavaScript能识别的字符串:

<script>
    // 注意字符串类型一定要加引号,不然JS会把它当成变量名解析
    var azureAppKey = '@HttpContext.Current.Session["azureappkey"]';
    alert(azureAppKey); // 这下就能正常弹出值啦
</script>

小提示:如果Session存的是数字类型可以不用引号,但字符串必须加,避免语法错误。

方法2:用HTML元素的data属性存值,再用JS读取

这种方式更优雅,适合需要在多处复用值的场景:

<!-- 先把值存在HTML元素的自定义data属性里 -->
<div id="azureKeyHolder" data-app-key="@HttpContext.Current.Session["azureappkey"]"></div>

<script>
    // 通过DOM读取data属性的值
    var keyHolder = document.getElementById('azureKeyHolder');
    var azureAppKey = keyHolder.dataset.appKey;
    alert(azureAppKey);
</script>

方法3:序列化传递(适合复杂对象)

如果以后你需要传的不是简单字符串,而是复杂对象,可以用Razor的序列化工具把Session内容转成JSON字符串:

<script>
    // 用Json.Encode把值序列化成JSON,再用Html.Raw避免转义
    var azureConfig = @Html.Raw(Json.Encode(new { AppKey = HttpContext.Current.Session["azureappkey"] }));
    alert(azureConfig.AppKey);
</script>

注意必须加@Html.Raw,不然序列化后的JSON会被转成HTML实体,导致JS解析失败。

另外给你个小建议:其实更符合MVC设计模式的做法是把Session值传给ViewBag或者ViewModel,比如:

public ActionResult Index() 
{
    Session["azureappkey"] = "xxx-xxxx-xxx-xx";
    // 用ViewBag传递
    ViewBag.AzureAppKey = Session["azureappkey"];
    // 更推荐用ViewModel的方式
    // var vm = new HomeViewModel { AzureAppKey = Session["azureappkey"].ToString() };
    // return View(vm);
    return View();
}

之后在视图里用@ViewBag.AzureAppKey或者@Model.AzureAppKey取值,代码会更清晰易维护~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:23:07