为什么Updatepanel阻止我的TextChanged事件被触发?

时间:2013-12-13 16:28:30

标签: asp.net vb.net webforms updatepanel

我有一段非常简单的代码,但TextChanged事件不会触发。我在没有UpdateMode,ChildrenAsTriggers和Triggers的情况下尝试过它。正如你所看到的,我已经尝试过了。似乎还没有开火。

期望:当我从CalendarExtender中选择日期时,会触发TextChanged事件。现在,当我这样做时,我知道Page_Loads会发生火灾。我知道当我没有在我的页面上安装UpdatePanel时会触发它。

我正在使用Webforms ASP.NET 4.5,Visual Studio 2012。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test.aspx.vb" Inherits="Test" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test</title>
    <link rel="stylesheet" href="CSS/Test.css" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
        <AjaxToolkit:ToolkitScriptManager ID="ajaxTSM1" runat="server">
        </AjaxToolkit:ToolkitScriptManager>
        <div>
            <asp:UpdatePanel runat="server" ID="TestUP" UpdateMode="Conditional" ChildrenAsTriggers="true">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="txtDate" EventName="TextChanged" />
            </Triggers>
            <ContentTemplate>           
                <div>                   
                    <br/ /><br />
                    <table>
                        <tr>
                            <td style="padding-right:20px;">Header1</td>
                            <td>Header2</td>
                        </tr>
                        <tr>
                            <td>
                                 <asp:TextBox ID="txtDate" ReadOnly="true" runat="server" Width="100px" AutoPostBack="True"></asp:TextBox>
                                 <ajaxToolkit:CalendarExtender ID="ceDate" runat="server" TargetControlID="txtDate" />
                            </td>
                            <td></td>
                        </tr>
                    </table>
                  </div>
             </ContentTemplate>
             </asp:UpdatePanel>
         </div>
    </form>
</body>
</html>

背后的代码

Partial Class Test    
    Inherits System.Web.UI.Page


    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        If Not IsPostBack Then
            txtDate.Text = DateTime.Now.ToShortDateString
        End If

        If IsPostBack Then

        End If
    End Sub


    Protected Sub txtDate_TextChanged(sender As Object, e As EventArgs) Handles txtDate.TextChanged

        txtDate.Text = Request(txtDate.UniqueID)
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

我注意到您为TextBox指定了ReadOnly="true"。在这种情况下,我不希望任何TextChanged事件。

请参阅ReadOnly in the MSDN docs

的说明