Ошибка Панели обновления: Управление с идентификатором “xxx” не могло быть найдено в UpdatePanel

У меня есть составной выпадающий календарный пользовательский элемент управления, который состоит из текстового поля и и календарное изображение и управление проверкой. Я выставляю свойство под названием "Текстовое поле" на usercontrol, который возвращает ссылку на текстовое поле, используемое в рамках управления. Это - текстовое поле, в которое пользователь вводит дату.

На странице ASPX у меня есть экземпляр этого usercontrol:

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

В моем коде позади, я хочу обнаружить, когда пользователь снабдил вкладками прочь текстового поля и, с помощью UpdatePanel, referesh соответствующее сообщение в зависимости от даты, которая была указана.

В другом месте на странице ASPX у меня есть это:

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

Вот то, что я делаю в коде позади:

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

Когда страница работает, и я просматриваю источник, я вижу что-то вроде этого:

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

Когда я выполняю его, я получаю эту ошибку:

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

Я не думал, что триггерное управление должно было быть в UpdatePanel. Я думал, что это было смыслом добавления триггера.

Как я обновляю эту панель обновления изменения в тексте на дате usercontrol. Затем я должен буду добавить другие триггеры для инициирования обновления Панели Обновления от других средств управления, рассеянных через страницу, таким образом, ясно все триггерные источники не могут быть в UpdatePanel.

Для попытки упрощения ситуации я добавил тестовое Текстовое поле, textbox1 к панели обновления:

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

Я затем получаю ошибку:

Не удалось найти событие названным 'onchange' на связанном управлении 'TextBox1' для триггера в UpdatePanel 'upIntendedStay'.

Хорошо, я добавил текстовое поле, TEXTBOX1, в UpdatePanel, изменение "ClientId" к "идентификатору" и "OnChange" к "TextChanged", и это работает. Но я все еще получаю ту же ошибку, если текстовое поле не в UpdatePanel.

Текстовое поле инициирования должно быть в панели обновления? Это - требование нанесения вреда.

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

Хорошо.. Когда я перемещаю athe календарь usercontrol в панель Update, я получаю эту ошибку:

Управление с идентификатором 'txtDate' не могло быть найдено для триггера в UpdatePanel 'upIntendedStay'.

Хм. Это, по-видимому, имеет проблему, находящую встроенное управление даже при том, что это в панели обновления, но это не имеет никакой проблемы при нахождении простого текстового поля, которое не встраивается в usercontrol!!

5
задан ChadD 30 March 2010 в 02:48
поделиться

3 ответа

Насколько я понимаю, текстовое поле встроено в пользовательский элемент управления dtmDateFirstEntry. Вы НЕ МОЖЕТЕ использовать непосредственно элемент управления, содержащийся в пользовательском элементе управления. Пользовательский элемент управления ДОЛЖЕН предоставлять события своих дочерних элементов управления, если вы хотите использовать их в качестве триггеров.

<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 будет событием, предоставляемым dtmDateFirstEntry. Вы знаете, как это сделать?

4
ответ дан 14 December 2019 в 01:05
поделиться

Вы можете попробовать:

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

то есть использовать ID вместо ClientID для ControlID и не использовать префикс «On» для EventName.

2
ответ дан 14 December 2019 в 01:05
поделиться

Страница ASPX:

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

Код за спиной:

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

И добавьте это событие в пользовательский элемент управления:

Дата публичного событияChanged(ByVal sender As Object, ByVal e As System.EventArgs)

.. и альт!

2
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: