asp.net中带有文本框的自动回发

本文关键字:文本 net asp | 更新日期: 2023-09-27 17:57:36

我有以下aspx代码

 <asp:TextBox ID="uname" runat="server" AutoPostBack="True" 
            ontextchanged="uname_TextChanged"></asp:TextBox>

在代码隐藏文件中

protected void uname_TextChanged(object sender, EventArgs e)
    {
        Response.Write("Called on postback");
    }

根据我的假设,由于自动回发,如果我在文本框中写任何内容,就会发生回发,但现在也不会发生,原因是什么?

  • 通常情况下,像控件一样,一个事件有多个事件处理程序,如果发生自动postback,将触发哪个事件

asp.net中带有文本框的自动回发

你说的是As per my assumption due to autopostback if I write anything in the textbox a postback will occur

这是错误的。当您的焦点从文本框中移开时,它将触发text changed事件。因此,当您键入内容并按下Tab键时,将只触发您的TextChanged事件。

如果您想在键入内容时触发TextChanged事件,则应该使用OnKeyDown事件从javascript调用它。参见以下代码示例:

<asp:TextBox ID="uname" runat="server" AutoPostBack="True"
    OnKeyDown="TextChanged(this)" OnTextChanged="uname_TextChanged"></asp:TextBox>

<script type="text/javascript">
    function TextChanged(control) {
        $(control).change();
    }
</script>

现在,当您在文本框中键入任何内容时,它将调用javascript的TextChanged方法,该方法将触发uname_TextChanged事件。

假设:

如果您的文本框控件位于UpdatePanel内,则也无法触发您的更改事件。在这种情况下,您应该为文本框定义触发器。如下所述:

<asp:UpdatePanel runat="server" ID="up1">
    <ContentTemplate>
        <asp:TextBox ID="uname" runat="server" AutoPostBack="True"
            OnKeyDown="TextChanged(this)" OnTextChanged="uname_TextChanged"></asp:TextBox>
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="uname" />
    </Triggers>
</asp:UpdatePanel>

问:如果发生自动备份,会触发哪个事件

答案:通常,对于在发布服务器之间更改内容的所有事件,AutoPostBack都需要。但在定义事件之前,它不会被触发。

例如,如果将DropDownListAutoPostBack属性设置为true,并且如果未指定OnSelectedIndexChanged事件,则它将不会触发此事件。但当您更改值时,您的页面将被张贴回。

TextBoxCheckBoxadioButton等情况下也会发生同样的情况

希望理解就足够了。

尝试将ontextchanged更改为ontextchanged,然后重试。在文本框中输入文本后,尝试在页面上单击鼠标,确保它有效。

MSDN声明只有当控件失去焦点时才会引发AutoPostBack:

获取或设置一个值,该值指示是否自动回发到服务器在TextBox控件失去焦点时发生。

使用AutoPostBack属性指定是否自动回发当TextBox控件失去焦点时,将发生对服务器的调用。在TextBox控件中按ENTER或TAB键是最常见的改变焦点的方式。

然而,一项测试显示,您需要先输入一个文本,才能进行PostBack。在我输入一些文本并从TextBox中弹出选项卡后,PostBack完成,并引发TextChanged事件。在清除文本并从TextBox中弹出选项卡后,还完成了AutoPostBack,因此它不取决于TextBox是否为空。

还要解决问题的第二部分:在PostBack期间引发的事件由ASP.NET框架在PostBack的初始化阶段决定。例如,如果Form值中包含的TextBox的文本与ViewState中存储的文本不同,则会引发TextChanged事件。这解释了为什么即使AutoPostback是由失去焦点启动的,也会调用TextChanged处理程序。