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,将触发哪个事件
你说的是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都需要。但在定义事件之前,它不会被触发。
例如,如果将DropDownList的AutoPostBack属性设置为true,并且如果未指定OnSelectedIndexChanged事件,则它将不会触发此事件。但当您更改值时,您的页面将被张贴回。
在TextBox、CheckBoxadioButton等情况下也会发生同样的情况
希望理解就足够了。
尝试将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处理程序。