[英]autpostback with textbox in asp.net
我有以下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");
}
根據我對自動回發的假設,如果我在文本框中編寫任何內容,都會發生回發,但是現在不發生回發,這可能是什么原因?
您說過, 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 , CheckBox , RadioButton等情況下也會發生同樣的事情。
希望足以理解。
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處理程序。
通過將ontextchanged更改為OnTextChanged進行嘗試,然后嘗試。 在文本框中輸入文字后,請嘗試在頁面上單擊鼠標以確保其正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.