【问题标题】:How to get asp.net Session value in jquery method?如何在 jquery 方法中获取 asp.net 会话值?
【发布时间】: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 值。

【问题讨论】:

  • 看起来应该可以了。使用上面的代码会发生什么?

标签: c# asp.net jquery asp.net-mvc


【解决方案1】:
$('input,select').attr('disabled','<%=Session["CoBrowse"].ToString() %>');

【讨论】:

    【解决方案2】:

    许多cmets:

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

      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,因为这个网站去掉了尖括号:(

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-10
          • 2017-09-27
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-04
          • 2011-09-09
          相关资源
          最近更新 更多