【问题标题】:How to avoid TextChanged event in ASP.NET如何避免 ASP.NET 中的 TextChanged 事件
【发布时间】:2013-01-27 17:16:40
【问题描述】:

我有一个文本框和一个回发按钮。

<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged1"     EnableViewState="false"></asp:TextBox><span></span>
<asp:Button ID="Button1" runat="server" Text="Button" />

所以,我需要仅在文本更改时触发 TextChanged 事件(具有讽刺意味),就像 EnableViewState 为 true 时触发一样。我无法取消订阅事件或在其他地方订阅它或启用 ViewState。 我试图从 HiddenField 的 TextBox 中保存文本,然后检查它是否已更改。这是代码

 protected void Page_Load(object sender, EventArgs e) {
    if (HiddenField1.Value != TextBox1.Text) {
        HiddenField1.Value = TextBox1.Text;
        TextBox1.Text = HiddenField1.Value;
    }           
}

但我不知道当文本没有更改并且不触发事件时该怎么办。

【问题讨论】:

  • 锄头你是否从 db 加载文本框?
  • 那你如何加载文本框呢?
  • hmmm...我认为它是在页面加载事件之后加载的。
  • 对不起,我还是有点困惑,你能告诉我你到底需要什么吗?
  • 我需要禁用 ViewState 的 TextBox 的行为就像启用它一样,即仅在文本更改时触发 TextChanged 事件(现在它会触发每个回发)。我无法取消订阅此事件或打开 ViewState。

标签: asp.net textbox viewstate textchanged


【解决方案1】:

问题是在禁用 ViewState 时从 TextBox 保存值。将它保存在 HiddenField 中并不是一个好主意,因为我们可以在 Page_Load 上从 HiddenField 中获取值,但我们需要在 TextBox init 中获取它。但是,如果我们将 TextBox 保存到 Session 变量中,这个问题就会消失。代码如下:

protected void TextBox1_TextChanged1(object sender, EventArgs e) {
    Session["text"] = TextBox1.Text;
}
protected void TextBox1_Init(object sender, EventArgs e) {
    if(Session["text"]!=null)TextBox1.Text = Session["text"].ToString();
}

在 textchanged 事件上保存会话变量中的值并在文本框初始化时恢复它。比较在框架级别上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多