Mise à jour du Panneau d'erreur: Contrôle avec l'ID “xxx” n'a pas pu être trouvé dans l'UpdatePanel

J'ai un composite déroulant calendrier de contrôle de l'utilisateur qui se compose d'une zone de texte et et calendrier de l'image et un contrôle de validation. J'expose une propriété appelée "zone de texte" sur le usercontrol qui renvoie une référence à la zone de texte utilisé dans le contrôle. C'est la zone de texte que l'utilisateur entre la date dans.

Dans la page ASPX, j'ai une instance de cet objet usercontrol:

   <uc1:DropDownCalendar ID="dtmDateFirstEntry" runat="server"  Required="True" />

Dans mon code, je veux détecter le moment où un utilisateur a à onglets hors de la zone de texte et, à l'aide d'un UpdatePanel, referesh un message approprié en fonction de la date qui a été spécifié.

Ailleurs dans la page ASPX, j'ai ceci:

   <asp:UpdatePanel ID="upIntendedStay" runat="server">
    <ContentTemplate>
        <asp:Label ID="Label4" runat="server" Text="Update this text from server" CssClass="ErrorText"></asp:Label>
    </ContentTemplate>
    </asp:UpdatePanel>

Voici ce que je fais dans le code behind:

If Not Me.IsPostBack Then

    dtmDateFirstEntry.TextBox.AutoPostBack = True
    Dim trigger As New AsyncPostBackTrigger
    trigger.ControlID = dtmDateFirstEntry.TextBox.ClientID
    trigger.EventName = "onChange"
    upIntendedStay.Triggers.Add(trigger)

End If

Lors de l'exécution de la page et j'ai vue la source, je vois quelque chose comme ceci:

<input id="ctl00_phPageContent_dtmDateFirstEntry_txtDate" class="DefaultTextBox" name="ctl00$phPageContent$dtmDateFirstEntry$txtDate" onchange="javascript:setTimeout('__doPostBack(\'ctl00$phPageContent$dtmDateFirstEntry$txtDate\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" style="width: 112px;" type="text" value="Mar-29-2010" />
<input id="ctl00_phPageContent_dtmDateFirstEntry_imgDate" name="ctl00$phPageContent$dtmDateFirstEntry$imgDate" src="images/calendar.JPG" style="border-width: 0px;" type="image" />&nbsp;

Quand je le lance, j'obtiens cette erreur:

A control with ID 'ctl00_phPageContent_dtmDateFirstEntry_txtDate' could not be found for the trigger in UpdatePanel 'upIntendedStay'. 

Je ne pense pas que la commande de déclenchement dû être à l'intérieur de l'UpdatePanel. Je pensais que c'était le point de l'ensemble de l'ajout de la gâchette.

Comment puis-je actualiser ce panneau de mise à jour des changements dans le texte de la date de usercontrol. Ensuite, je vais avoir à ajouter d'autres éléments déclencheurs pour déclencher la mise à jour du Panneau de mise à Jour à partir d'autres contrôles dispersés à travers la page, donc clairement tous les déclencher des sources ne peut pas être à l'intérieur de l'UpdatePanel.

Pour essayer de simplifier la situation, j'ai ajouté un test de la zone de texte, zone de texte 1 le panneau de mise à jour:

 <asp:UpdatePanel ID="upIntendedStay" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Label ID="Label4" runat="server" Text="Update tHis text from server" CssClass="ErrorText"></asp:Label>
    </ContentTemplate>
    </asp:UpdatePanel>

J'ai ensuite le message d'erreur:

Ne pouvait pas trouver un événement nommé 'onchange' associated control "TextBox1" pour le déclencher dans UpdatePanel 'upIntendedStay'.

OK, j'ai ajouté une zone de texte, zone de texte 1, au sein de l'UpdatePanel, le changement "ClientId" à la "ID" et "OnChange" à "TextChanged" et ça fonctionne. Mais j'ai toujours le même message d'erreur si la zone de texte n'est pas à l'intérieur de l'UpdatePanel.

Doit le déclenchement de la textbox être dans le panneau de mise à jour? C'est un paralysant exigence.

Dim trigger As New AsyncPostBackTrigger
'trigger.ControlID = dtmDateFirstEntry.TextBox.ID '<<<<<<<<<<<<<<<<<<<<<
trigger.ControlID = TextBox1.ID
trigger.EventName = "TextChanged"
upIntendedStay.Triggers.Add(trigger)

OK..Quand je bouge athe calendrier usercontrol dans le panneau de mise à Jour, j'obtiens cette erreur:

Un contrôle avec l'ID 'txtDate' n'a pas pu être trouvé pour la détente UpdatePanel 'upIntendedStay'.

Hmmm. C'est apparemment un problème de trouver le contrôle embarqué, même si c'est dans le panneau de mise à jour, mais il n'a pas de problème pour trouver une simple zone de texte qui n'est pas incorporé à l'intérieur d'un usercontrol!!

Pouvez-vous montrer plein de balisage hors de votre page?
Essayez de configurer le contrôle externe avec le Panneau de mise à Jour de la balise et de voir si il y a des différences dans le balisage.

OriginalL'auteur ChadD | 2010-03-30