如何在 jquery 方法中获取 asp.net 会话值?

Posted

技术标签:

【中文标题】如何在 jquery 方法中获取 asp.net 会话值?【英文标题】:How to get asp.net Session value in jquery method? 【发布时间】:2010-10-25 18:53:48 【问题描述】:

我想在 ASP.NET MVC 视图页面的 jquery 方法中访问 Session 值。看下面的代码,

$('input[type=text],select,input[type=checkbox],input[type=radio]').attr('disabled', '<%= Session["CoBrowse"].ToString() %>');

如何在 jquery 中获取 Session 值。

【问题讨论】:

看起来应该可以了。使用上面的代码会发生什么? 【参考方案1】:
$('input,select').attr('disabled','<%=Session["CoBrowse"].ToString() %>');

【讨论】:

【参考方案2】:

许多cmets:

    您不能“从 jQuery 访问会话”。您使用 MVC 和 asp.net 创建 html 页面(使用 javascript)。 Session 是服务器端对象,JavaScript 运行在客户端。 看看jQuery's selectors。他们有有用的选择器,例如 :checkbox:text 等。 您的代码生成您期望的 JavaScript:它编译、运行并生成 JavaScript,并在正确的位置使用 truefalse。 这不是禁用元素的方法。如果一个元素具有 'disabled' 属性,它将被禁用,无论值如何。 &lt;input type="checkbox" disabled="false" /&gt; 也是一个禁用复选框,因此您的控件始终处于禁用状态

    如果您仍然选择这种方式,请考虑:

    var isCoBrowse = <%= Session["Name"].ToString().ToLower() %>;
    if(!isCoBrowse) //disable controls
      $(":text,:checkbox,:radio").attr("disabled","disabled"); //standard.
    

    这将生成客户端 JavaScript 代码:

    var isCoBrowse = true;
    

    并且,启用一个元素:

    $("input").removeAttr("disabled");
    

此外,还有更好的方法来实现这一点。如果可能,您是否考虑过禁用服务器端的控件?

【讨论】:

var isCoBrowse = ;语法错误 #1 - 错误答案(例如 var search = @Session("MyValue") 有效) @EdDeGagne - 我不是在第 5 点上写的吗? JavaScript 不能直接访问会话,甚至不知道有会话。使用会话作为服务器端来创建 JavaScript 完全是另一回事。 @Kobi,您可以在 jQuery 的 Razor 视图中访问 Session 对象,我在键入此内容时正在这样做。当然,这是当前的客户端值,而不是 Server 对象的值(我认为您在第 5 点中提出了建议)。【参考方案3】:

不确定这是否是最佳路线,但在您的 aspx 页面中,您可以创建一个返回会话变量值的方法,例如

服务器端:

using System.Web.Services;
 [WebMethod(EnableSession = true)]
public static string GetSession()

   return Session["CoBrowse"].ToString();

然后在客户端使用jQuery调用这个方法:

$.ajax(
    type: "POST",
    url: "./Default.aspx/GetSession",
    data: "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(result)
        ('input[type=text],select,input[type=checkbox],input[type=radio]').attr('disabled', result.d);
    
);

【讨论】:

您可以从静态方法中访问 Session 吗?我不认为你可以。 这也是我走过的路线。我有一个 Web 服务,它会像这样返回我的会话 ID。 Guid a = Guid.Parse(HttpContext.Current.Session["Session_Id"].ToString());然后我通过 jquery ajax 函数将其读入客户端。请记住,它需要是 GET,因为您只返回一个值。 我不知道为什么有人赞成这个答案。我们无法在静态方法中获取 Session【参考方案4】:
<input id="sessionInput" type="hidden" value='<%= Session["name"] %>' />

var getSessionValue = $('#sessionInput').val();

【讨论】:

【参考方案5】:

如果 Session 变量是敏感数据(在这种情况下可能不是),我不会使用此解决方案,因为当您查看 javascript 源时它会显示 Session 数据。如果是敏感的会话数据,最好通过网络方法访问(见上面的答案)。

【讨论】:

【参考方案6】:

简单!当你知道如何:

@Html.Encode(Session("classificationTitle"))

...在 .js 文件中:

var classificationTitle = document.getElementById('classificationTitle').innerHTML;

抱歉 - 我无法发布完整的 html,因为这个网站去掉了尖括号:(

【讨论】:

以上是关于如何在 jquery 方法中获取 asp.net 会话值?的主要内容,如果未能解决你的问题,请参考以下文章

jquery 如何获取asp.net用户控件的id

如何使用jQuery调用带有参数的asp.net asmx web服务来获取响应

如何使用 ASP.NET 从 MSSQL 中获取 JQuery 自动完成小部件的数据

如何使用 JavaScript 或 JQuery 在 ASP.net 中获取生成控件的 ID

在回流中,我如何从 asp.net web api 获取数据

如何使用html和jquery通过asp.net核心api调用获取数据?