首页 > 解决方案 > 如何检测用户更改表单数据?

问题描述

ASPX:

<asp:TextBox id="tb1" runat="server"/>

C#:

public hello(){
    Debug.WriteLines("Current value is: " + tb1.Value);
}

我有一个计时器,它将在页面开始时每 2 秒运行一次 hello()。假设 tb1 有一个默认值“Bob”,这将每 2 秒正确输出一次。假设我在 tb1 中输入了一些内容并将默认值替换为“Fred”。但是,即使我已经替换了当前值,“Bob”仍然每 2 秒输出一次。

如何解决此问题,以便 hello() 查看 tb1 的当前值,而不是启动时快照的内容?


我的最终目标是检测用户何时输入信息,因此我可以根据他们当前输入的内容按需显示/隐藏表单元素。如果有比不断检查值更简单的方法,而不是让客户继续填写信息以外的任何事情,请告诉我。

标签: c#asp.nettimer

解决方案


您可以使用 onchange 属性并在文本更改时调用函数,而不是每 10 秒检查一次并节​​省一些资源。

就像是

<asp:Textbox id="myTextbox" runat="server" onChange="txtChanged" AutoPostBack="true"/>

然后在后面的代码中

public void txtChanged(object sender, EventArgs e)
{
    //Get text
    string text = ((TextBox)sender).Text;
    Debug.WriteLines("Current value is: " + text);
}

您应该避免使用这种计时器方法来检测用户输入的原因有很多。

效率:无论用户在做什么,每 10 秒调用一次方法是低效的。

用户体验:当 Bob 必须额外等待 10 秒以更新表单时,这会造成糟糕的用户体验。

可维护性:它还降低了代码的可维护性,尤其是当这种计时器方法被极端使用时,因为接口和后面的代码之间的直接关联性较低。


推荐阅读