【问题标题】:Settings values to Session Variable from Javascript从 Javascript 将值设置为会话变量
【发布时间】:2013-08-21 15:08:03
【问题描述】:

我有一个购物车,对于产品交付的时间段选择,我想显示下一周的日期、第一列(每行中的每天)和另一列中的时间段,格式如下:

Column1                            Column2
Aug 19, 2013    [RadioButton]10:00AM    [RadioButton]12:00PM
Aug 20, 2013    [RadioButton]10:00AM    [RadioButton]12:00PM
Aug 21, 2013    [RadioButton]10:00AM    [RadioButton]12:00PM
Aug 22, 2013    [RadioButton]10:00AM    [RadioButton]12:00PM
Aug 23, 2013    [RadioButton]10:00AM    [RadioButton]12:00PM
Aug 24, 2013    [RadioButton]10:00AM    [RadioButton]12:00PM
Aug 25, 2013    [RadioButton]10:00AM    [RadioButton]12:00PM

我尝试使用带有radiobuttonlist 的gridview(用于时间槽),但问题是用户能够选择每天的时间。因此,作为替代方案,我正在尝试检查在 javascript 结束时选择的 TimeSlot,并且因为我希望下一个结帐向导可以访问 Slot,所以我想将选定的时间段存储在会话中。如果未选择,我可以验证时隙,如果选择,我可以在警报中获取值。但是,当我尝试将值从隐藏字段保存到会话时(在客户端单击按钮时保存),我没有将会话值保存到其他页面。以下是我正在尝试的代码:

 <script>
        function SaveToHiddenField() {
            if ($("input:radio:checked").length > 0) {
                $radio = $("input:radio:checked");
                document.getElementById('<%= hdnField.ClientID %>').value = $radio.val();
                <% Session["Slot"] = hdnField.Value; %>
                window.location.href='default2.aspx'
                return true;
            }
            else {
                alert("Nothing Selected");
                return false;
            }
        }
    </script>

<asp:Button ID="btnSession" runat="server" Text="Save to Session" OnClientClick="return SaveToHiddenField()" />
<asp:HiddenField ID="hdnField" runat="server" />

谁能告诉我我做错了什么,或者任何其他可能是我查询的更好选择的替代方法。

【问题讨论】:

  • 客户端 javascript 无法直接访问会话变量,因为客户端 javascript 运行在客户端上,而会话变量存在于服务器上。
  • 嗨@KevinB 感谢您的及时回复,您能告诉我还有其他可能的解决方案吗?
  • @Abbas 可以使用 ajax,尽管值被保存到隐藏字段。为什么不能在回发期间通过单击保存按钮阅读并更新会话?
  • 是的,使用 cookie,或者向服务器发送一个 ajax 请求,其中包含您希望放入会话中的数据,或者在执行 window.location 时将该数据作为 GET 参数传递。跨度>
  • 嗨@JasonP,你的意思是我需要一个回发来将隐藏字段值保存到会话变量中,我不能同时存储它,就像我在上面的例子中所做的那样,您可以检查,在将值保存到隐藏字段的下一行,我也将它存储在 Session 变量中,但这不起作用

标签: jquery asp.net radio-button session-variables


【解决方案1】:

问题已解决,点击按钮我写了下面的代码:

Session["Slot"] = hdnField.Value;
        Response.Redirect("default2.aspx");

现在当页面重定向到 default2.aspx 时,我有了会话值。

谢谢大家,
特别是@JasonP。

【讨论】:

    【解决方案2】:

    您可以使用 ASP.NET AJAX 页面方法来存储和检索会话值,如下所示:

    default1.aspx 的代码隐藏:

    [WebMethod(EnableSession = true)]
    public static void StoreSessionValue(string theValue)
    {
        HttpContext.Current.Session["TheValueToStore"] = theValue;
    }
    

    现在在 default1.aspx 的标记中,使用 jQuery 调用此页面方法,如下所示:

    $.ajax({
        type: "POST",
        url: "defaul1.aspx/StoreSessionValue",
        data: "{'theValue': document.getElementById('<%= hdnField.ClientID %>').value}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            window.location.href='default2.aspx';
        }
    });
    

    default2.aspx 的代码隐藏:

    [WebMethod(EnableSession = true)]
    public static string RetrieveSessionValue()
    {
        return HttpContext.Current.Session["TheValueToStore"].ToString();
    }
    

    现在在 default2.aspx 的标记中,使用 jQuery 调用此页面方法,如下所示:

    $.ajax({
        type: "POST",
        url: "defaul1.aspx/RetrieveSessionValue",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            // Do something with the session value that came back in the variable "msg"
        }
    });
    

    【讨论】:

      【解决方案3】:

      在 C# 中

      Session["MySes"] = "SessionValue";
      

      在 Javascript 中

       var ScriptSes = "<%= Session["MySes"]%>"; 
      

      在html中

       <input type="button"     value="Save to Session"  onclick="SaveToHiddenField()" />
      

      在 html 中使用 html 按钮标记,当您使用 asp.net 按钮控件时,它会加载页面,然后您的变量会话值销毁,因此您无法获取会话值。所以使用 html 输入类型按钮而不是 asp.net 按钮控制器

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-08
        • 2019-04-24
        • 1970-01-01
        • 2013-01-27
        • 2013-08-07
        • 1970-01-01
        • 2014-01-23
        相关资源
        最近更新 更多