【问题标题】:Reset session upon textbox input change in asp .net c#在asp .net c#中的文本框输入更改时重置会话
【发布时间】:2013-07-01 03:44:18
【问题描述】:

我在页面中有会话,并希望在用户文本输入更改时重置此会话。例如:帐号 xxx 将有一个会话,一旦帐号更改为 yyy 我想重置会话。我没有登录到此页面,因此无法在注销时转储会话。帮助表示赞赏。提前谢谢你。

【问题讨论】:

  • 您能否更清楚地了解您想要做什么以及“会话”的确切含义?你的意思是会话状态?登录-注销与您的请求有何关系?
  • 是会话状态。此页面仅通过 url 加载,因此无需登录即可访问此页面,任何帐户都可以访问此页面。我要做的就是在更改帐号时重置会话状态。

标签: c# asp.net session


【解决方案1】:

试试这个:

在 aspx 中:

    <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" />

在后面的代码中:

    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        Session.Clear();
    }

【讨论】:

  • 这里唯一要记住的是,TextChanged 事件仅在文本框失去焦点时触发。此外,要让服务器端事件触发文本框,还需要将 AutoPostBack 设置为 true。
  • 不,这不是真的。如果控件的值与视图状态中的值不同,则触发 TextChanged 事件。 AutoPostBack 属性不需要设置为 true。
  • 根据我的阅读,如果您希望触发 TextChanged 事件,您需要将 AutoPostBack 设置为 true stackoverflow.com/questions/5029804/… dotnetfunda.com/forums/…
  • @KevinKunderman 是对的,它仅在 autopostback 设置为 true 时才有效,但我不想这样。我已经在这个使用 jquery 填充帐户详细信息的 html 输入字段上使用了 onblur,但我不知道如何同时重置会话。提前谢谢你
  • 如果您将 AutoPostBack 设置为 true,它会在 TextBox 失去焦点并且 TextBox 中的文本也发生更改时回发。但无论页面中的哪个控件导致回发,TextChanged 事件都会为 TextBox 触发。
【解决方案2】:

因此,您需要一个在帐号更改(或用户文本输入更改)时触发的事件处理程序,然后根据this post,您需要使用Session.Clear() 只需从对象或Session.Abondon() 中删除所有值,这将销毁会话并触发 Session_OnEnd 事件。无论您使用哪种方式,都取决于您想要完成的任务。

【讨论】:

  • 谢谢你帮助我做我想做的事。
  • 不客气@hima!不要忘记为您的问题选择一个答案:)
【解决方案3】:

对文本框的“onkeyup”事件进行ajax调用并在该会话中设置新值,您将获得文本框的新值并可以在会话中设置它。

【讨论】:

    【解决方案4】:

    使用TextBoxTextChanged 事件并使用Session.Abandon()Session.Clear() 方法销毁会话 这将帮助你
    如果你在这里写代码,那么我们可以给你准确的答案

    【讨论】:

      【解决方案5】:

      试试这个

        <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"></asp:TextBox>
      

      后面的代码

      protected void TextBox1_TextChanged(object sender, EventArgs e)
          {
              Session["your_sesion_name"]=TextBox1.Text;//or what ever you want to update value
          }
      

      【讨论】:

        【解决方案6】:

        有几种方法可以满足您的要求。

        选项一:

        您可以使用文本框 ontextchanged 事件

        <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
        

        在后面的代码中:

         protected void TextBox1_TextChanged(object sender, EventArgs e)
         {
                Session.Clear();
         }
        

        这里的坑是 OnTextChanged 事件只有在文本框失去焦点时才会触发。

        选项 2: 使用 JavaScript 捕获 onkeyup 事件并进行 ajax 回调到服务器以更新您的会话信息

        这里的坑是每次用户在文本框中输入一个字符时,你都会进行 ajax 调用。尽管您可以添加检查,以便仅在帐号达到一定长度时才进行调用。

        选项 3: 您可以在表单中添加一个按钮,供用户在输入帐号后单击。这将避免像选项 2 那样在每次按键时不必要地调用服务器。然后在您的按钮单击事件中,您可以使用会话完成工作

         <asp:TextBox ID="TextBox1" runat="server"  />
         <asp:Button ID="btnSubmit" runat="server" onclick="btnSubmit_Click" Text="Submit" />
        

        后面的代码

         protected void btnSubmit_Click(object sender, EventArgs e)
         {
             // do session work
         }
        

        【讨论】:

        • 感谢您的详尽回答。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        相关资源
        最近更新 更多