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

ASP.NET Core MVC 6中jQuery的$(document).ready读取Session值失败求助

问题描述

我正在开发一个ASP.NET Core MVC 6应用,在控制器中通过如下代码设置Session变量:

HttpContext.Session.SetString("PrimaryNavigation", "First");

我需要在_Layout.cshtml中获取该值,于是编写了如下代码:

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        alert('<%= Session("PrimaryNavigation")%>');
    });
</script>

但弹出的alert显示的是'<%= Session("PrimaryNavigation")%>'而非对应的Session值。此前在其他使用JavaScript的应用中该方式可行,但在jQuery与ASP.NET Core的组合中却无法生效,请问我遗漏了什么?

解决方法

你用的是ASP.NET Web Forms的语法<%= %>,但ASP.NET Core MVC采用的是Razor语法,两者不兼容。要在Razor视图(包括_Layout.cshtml)中获取Session值,需要改用Razor的写法:

方式一:直接在脚本中嵌入Razor表达式

把原来的<%= Session("PrimaryNavigation")%>替换为@Context.Session.GetString("PrimaryNavigation"),代码修改如下:

<script type="text/javascript">
    $(document).ready(function () {
        alert('@Context.Session.GetString("PrimaryNavigation")');
    });
</script>

注意:如果Session值可能包含单引号,直接拼接会触发JS语法错误,建议用Json.Serialize做转义处理:

<script type="text/javascript">
    $(document).ready(function () {
        var navValue = @Json.Serialize(Context.Session.GetString("PrimaryNavigation"));
        alert(navValue);
    });
</script>

方式二:通过HTML元素属性中转读取

如果不想在脚本里直接写Razor代码,可以先把Session值存入页面元素的data-*属性,再用JS读取:

<div id="navData" data-nav-value="@Context.Session.GetString("PrimaryNavigation")"></div>

<script type="text/javascript">
    $(document).ready(function () {
        var navValue = $('#navData').data('nav-value');
        alert(navValue);
    });
</script>

另外要确认你已在ASP.NET Core中正确配置Session服务:

  1. 在Program.cs中添加Session服务:
builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(30);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
});
  1. 在中间件管道中启用Session(需放在app.UseRouting()之后、app.UseAuthorization()之前):
app.UseSession();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:05:56