使用 Javascript 或 jQuery 检索会话变量的简单快捷的方法

simple and fast ways to retrieve session variables using Javascript or jQuery?

本文关键字:简单 方法 变量 会话 Javascript jQuery 检索 使用      更新时间:2023-09-26

我是使用jQuery和/或Javascript进行Web UI开发的新手。 我必须将其用作项目的一部分,但我不是专家。

真的非常感谢比我更了解这个领域的人的洞察力。

我的要求

我在更新面板内的页面上有一个按钮。

当从 jQuery/Javascript 函数以编程方式单击按钮时,我需要在 ASP.Net Web 应用程序代码隐藏中的变量中设置一个值

然后,我需要将这个更改后的变量从隐藏的代码传递回页面。 此变量的值将确定另一个 jQuery/Javascript 函数在进一步的用户操作中的行为方式。

我无法使用隐藏字段,因为它们正在通过面板的OnUnload方法在更新面板中重置。

我的问题

如果我在更新面板

内的按钮单击后将其填充到后面的代码中,是否有一种简单快捷的方法让此更新面板之外的 jQuery/Javascript 函数会话中检索变量? 这可能吗?

我的用户界面代码

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnUnload="UpdatePanel_Unload">
<ContentTemplate>
 <asp:Button ID="btnSendMeTheField" runat="server" style="visibility: hidden; display: none;"  OnClick="btnSendMeTheField_Click"/>
</ContentTemplate>
</asp:UpdatePanel>

处理数据并发回变量的服务器代码

Protected Sub btnSendMeTheField_Click(sender As Object, e As EventArgs) Handles btnSendMeTheField.Click
                Dim parsedObjectId As String = ""
                parsedObjectId = "1000"
                Session("objectId") = parsedObjectId
End Sub

好的,一个例子 - 改编自现有项目。为了保护无辜的:),名字已经改变

首先是 HttpHandler。这将响应请求会话变量值的特定 jQuery AJAX 请求。当它返回 JSON 时,创建一个简单的对象来返回结果(返回类型当然可以根据需要复杂):

(再次抱歉,这是 C# 不 VB.NET;我试图让它尽可能简单)

[Serializable]
public class ResponseItem
{
    public string SessionVariable { get; set; }
    public ResponseItem(string sessionVariable)
    {
        this.SessionVariable = sessionVariable;
    }
}

为了简单起见,请将 HttpHandler 添加到您的 Web 项目中。您应该下载最新版本的Newtonsoft.Json,并首先添加对它的引用。此处理程序只需获取在请求"sessionVariableName"参数中传递的任何内容,尝试检索该名称的会话变量并将其值作为字符串返回:-

[WebService(Namespace = "http : / /  namespace not important for your test")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
    public bool IsReusable { get { return false; } }
    public void ProcessRequest(HttpContext context)
    {
        string json = string.Empty;
        try
        {
            if (!string.IsNullOrEmpty(context.Request["sessionVariableName"]))
            {
                string sessionVariableName = context.Request["sessionVariableName"];
                if (context.Session[sessionVariableName] != null)
                {
                    var response = new ResponseItem(context.Session[sessionVariableName].ToString());
                    json = Newtonsoft.Json.JsonConvert.SerializeObject(response);
                }
            }
        }
        catch (Exception ex)
        {
            // you might want to create an "Error" type to return as JSON here
        }
        context.Response.Write(json);
    }
}

您需要在 web.config 中注册您的处理程序;我假设您使用的是 IIS7 或更高版本:-

  <system.webServer>
.
.
.
    <handlers>
      <!-- Custom HTTP handlers -->
      <add name="Handler" preCondition="integratedMode" verb="*" path="Handler.ashx" type="YourProject.YourNamespace.Handler, YourProject" />

最后是前端。一个简单的测试表格: -

<div>
    <asp:TextBox ID="txtSessionVariableName" runat="server" ClientIDMode="Static" />
    <asp:TextBox ID="txtResponse" runat="server" ClientIDMode="Static" /> 
    <input type="button" value="click me" onclick="javascript::CallHandler()" />
</div>    

调用处理程序的方法:-

function CallHandler()
{
    $.getJSON("Handler.ashx", 
     {
             "sessionVariableName": $("#txtSessionVariableName").val()
     },
     handleResult);
}

处理结果的回调方法:-

function handleResult(result)
{
    var sessionItem = eval(result);
    $("#txtResponse").text(sessionItem.SessionVariable);
}

若要对此进行测试,请键入已知应用中存在的会话变量的名称;处理程序应返回该变量,回调函数会将内容写入 txtResponse。

对不起,如果这是一个很长的例子;如果您需要更多帮助,请告诉我。

我会使用jQuery AJAX和HttpHandler。确保使 HttpHandler 实现 IRequiresSessionState 以便访问当前会话。

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.irequiressessionstate(v=vs.110).aspx

我会使用 Newtonsoft.Json,而不是标准的 Microsoft lib,来转换 JSON。