簡體   English   中英

asp.net中帶有文本框的autpostback

[英]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。 但是,除非您為此定義事件,否則它不會被觸發。

例如,如果將DropDownListAutoPostBack屬性設置為true ,並且未指定OnSelectedIndexChanged事件,則它將不會觸發此事件。 但是,當您更改值時,頁面將被回發。

TextBoxCheckBoxRadioButton等情況下也會發生同樣的事情。

希望足以理解。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM