Frage

habe ich eine Composite-Drop-Down-Kalender Benutzersteuerung, die aus einer Textbox und und Kalenderbild und ein Validierungssteuerelement besteht. Ich aussetzen eine Eigenschaft namens „TextBox“ auf dem Usercontrol, die einen Verweis auf die Textbox innerhalb der Steuerung verwendet zurückgibt. Dies ist die Textbox, dass der Benutzer gibt das Datum in.

In der ASPX-Seite, ich habe eine Instanz dieses Usercontrol:

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

In meinem Code hinter, ich mag, erkennen, wenn ein Benutzer der Textbox mit Registerkarten aus und ein Update verwenden, referesh eine entsprechende Meldung je nach dem Datum, das angegeben wurde.

Anderswo in der ASPX-Seite Ich habe diese:

   <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>

Hier ist, was ich im Code tun hinter:

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

Wenn die Seite ausgeführt und ich die Quelle sehen, ich sehe etwas wie folgt aus:

<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;

Wenn ich es laufen, ich diesen Fehler:

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

Ich glaube nicht, dass die Trigger-Steuerung innerhalb des Update sein mußte. Ich dachte, das war der springende Punkt bei den Auslöser hinzuzufügen.

Wie aktualisiere ich diese Update-Panel Änderungen am Text im Zeitpunkt Usercontrol. Als nächstes werde ich andere Auslöser hinzuzufügen habe die Auffrischung der Update-Panel von anderen Steuerungen über die Seite verstreut auszulösen, so eindeutig alle der Triggerquellen nicht innerhalb der Update sein.

Um zu versuchen, eine, die Situation zu vereinfachen, habe ich einen Test Textbox, textbox1 zum Update-Panel:

 <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>

ich dann den Fehler:

Es kann kein Ereignis mit dem Namen ‚Onchange‘ auf damit verbundene Kontrolle ‚TextBox1‘ für den Abzug in Update ‚upIntendedStay‘ gefunden.

OK, Ich habe eine Textbox, Textbox1, innerhalb der Update, ändern „ClientId“ auf „ID“ und „OnChange“ auf „Textchanged“ und es funktioniert. Aber ich bekomme immer noch den gleichen Fehler, wenn die Textbox nicht innerhalb der Update ist.

Muss das auslösende Textbox innerhalb des Update-Panel sein? Dies ist eine lähmende Anforderung.

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

OK..When I athe Kalender Usercontrol in den Update-Panel bewegen, ich diesen Fehler:

Eine Kontrolle mit der ID ‚TxtDate‘ kann nicht für den Auslöser in Update ‚upIntendedStay‘ gefunden werden.

Hmmm. Es hat offensichtlich ein Problem, die eingebettete Steuerung zu finden, obwohl es in dem Update-Panel, aber es hat kein Problem, eine einfache Textbox zu finden, die nicht innerhalb eines Usercontrol !!

eingebettet ist
War es hilfreich?

Lösung

Nach was ich die Textbox verstehen ist eingebettet auf User Control dtmDateFirstEntry. Sie kann nicht durch eine Benutzersteuerung enthalten ist direkt eine Steuer verwenden. Die Benutzerkontrolle muss die Ereignisse seines Kindes Kontrollen aussetzen, wenn man sie als Auslöser verwendet werden soll.

<asp:UpdatePanel ID="upIntendedStay" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="dtmDateFirstEntry" EventName="DateChanged" />
    </Triggers>
    <ContentTemplate>
        <asp:Label ID="Label4" runat="server" Text="Update tHis text from server" CssClass="ErrorText"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

DateChanged wäre ein Ereignis von dtmDateFirstEntry ausgesetzt sein. Wissen Sie, wie dies zu tun?

Andere Tipps

Möchten Sie folgendes versuchen:

...
trigger.ControlID = dtmDateFirstEntry.TextBox.ID
trigger.EventName = "TextChanged"
...

das ist, verwenden Sie die ID anstelle der ClientID für die ControlID und verwenden Sie nicht den „Einen“ Präfix für den Eventnamen.

ASPX Seite:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    <asp:UpdatePanel ID="upIntendedStay" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
             <uc1:DropDownCalendar ID="DropDownCalendar1" runat="server" />
            <asp:Label ID="Label4" runat="server" Text="Update tHis text from server" CssClass="ErrorText"></asp:Label>

        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

-Code hinter:

If Not Page.IsPostBack Then

    Dim trigger As New AsyncPostBackTrigger
    TextBox3.AutoPostBack = True
    trigger.ControlID = TextBox3.ID
    trigger.EventName = ""
    upIntendedStay.Triggers.Add(trigger)

    Dim trigger2 As New AsyncPostBackTrigger
    DropDownCalendar1.TextBox.AutoPostBack = True
    trigger2.ControlID = DropDownCalendar1.ID
    trigger2.EventName = "DateChanged"
    upIntendedStay.Triggers.Add(trigger2)

End If

Label4.Text = Now.ToString

Und fügen Sie diesen Termin in Ihre Benutzersteuerung:

öffentliche Veranstaltung DateChanged (ByVal Absender als Gegenstand, ByVal e As System.EventArgs)

.. und Viola!

In den Trigger Vor Page_Load, ex. Page_Init.

Für einen HTML-Steuerelement Runat Server innerhalb eines Update-Panel können Sie den Update-Panel dereferenzieren müssen einen Griff an die Steuerung auf der Serverseite zu bekommen:

mit System.Web.UI.HtmlControls;

HtmlControl x = (HtmlControl)this.MyUpdatePanel.FindControl("MyHtmlControl");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top