如何在 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,并在正确的位置使用 true
或 false
。
这不是禁用元素的方法。如果一个元素具有 'disabled' 属性,它将被禁用,无论值如何。 <input type="checkbox" disabled="false" />
也是一个禁用复选框,因此您的控件始终处于禁用状态。
如果您仍然选择这种方式,请考虑:
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 asmx web服务来获取响应
如何使用 ASP.NET 从 MSSQL 中获取 JQuery 自动完成小部件的数据
如何使用 JavaScript 或 JQuery 在 ASP.net 中获取生成控件的 ID