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

C# asp.net中带文本框的自动回发,c#,asp.net,events,textbox,autopostback,C#,Asp.net,Events,Textbox,Autopostback,我有下面的aspx代码 <asp:TextBox ID="uname" runat="server" AutoPostBack="True" ontextchanged="uname_TextChanged"></asp:TextBox> 根据我对自动回邮的假设,如果我在文本框中写入任何内容,回邮将会发生,但现在它也不会发生,原因可能是什么 通常,一个事件(如控件)有多个事件处理程序,如果发生自动回发,将触发哪个事件 声明只有当控件失去焦点

我有下面的aspx代码

 <asp:TextBox ID="uname" runat="server" AutoPostBack="True" 
            ontextchanged="uname_TextChanged"></asp:TextBox>
根据我对自动回邮的假设,如果我在文本框中写入任何内容,回邮将会发生,但现在它也不会发生,原因可能是什么

  • 通常,一个事件(如控件)有多个事件处理程序,如果发生自动回发,将触发哪个事件
声明只有当控件失去焦点时,自动回发才会升起:

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

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

但是,测试表明,要进行回发,需要先输入文本。在我输入一些文本并从文本框中弹出选项卡后,回发完成,并引发TextChanged事件。清除文本并跳出文本框后,自动回发也完成了,因此它不取决于文本框是否为空

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

说明只有在控件失去焦点时才会引发自动回发:

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

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

但是,测试表明,要进行回发,需要先输入文本。在我输入一些文本并从文本框中弹出选项卡后,回发完成,并引发TextChanged事件。清除文本并跳出文本框后,自动回发也完成了,因此它不取决于文本框是否为空


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

通过将ontextchanged更改为ontextchanged进行尝试,然后重试。在文本框中输入文本后,尝试在页面上单击鼠标,确保其正常工作。

尝试将ontextchanged更改为ontextchanged,然后重试。在文本框中输入文本后,尝试在页面上单击鼠标,确保其正常工作。

根据我的假设,由于自动回发,您说的是
。如果我在文本框中写入任何内容,将发生回发。

这是错误的。当文本框中的焦点熄灭时,它将触发
文本更改事件。因此,当您键入内容并按
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>
Q:如果发生自动回邮,将触发哪个事件?

回答:通常,对于在post服务器之间更改内容的所有事件,自动回发需要。但在你为它定义事件之前,它不会被触发

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

文本框复选框单选按钮等情况下也会发生同样的情况


希望这足够理解

您所说的
根据我的假设,由于自动回发,如果我在文本框中写入任何内容,将发生回发

这是错误的。当文本框中的焦点熄灭时,它将触发
文本更改事件。因此,当您键入内容并按
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>
Q:如果发生自动回邮,将触发哪个事件?

回答:通常,对于在post服务器之间更改内容的所有事件,自动回发需要。但在你为它定义事件之前,它不会被触发

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

文本框复选框单选按钮等情况下也会发生同样的情况

希望这足够理解

你试过戴德吗
<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>