gpt4 book ai didi

asp.net - 更新面板错误 : Control with the ID "xxx" could not be found in the UpdatePanel

转载 作者:行者123 更新时间:2023-12-04 17:41:37 25 4
gpt4 key购买 nike

我有一个复合下拉日历用户控件,它由一个文本框和日历图像以及一个验证控件组成。我在用户控件上公开了一个名为“TextBox”的属性,该属性返回对控件中使用的文本框的引用。这是用户输入日期的文本框。

在 ASPX 页面中,我有一个这个用户控件的实例:

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

在我后面的代码中,我想检测用户何时退出文本框,并使用 UpdatePanel 根据指定的日期引用适当的消息。

在 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 中。我认为这就是添加触发器的全部意义所在。

如何刷新此更新面板对日期用户控件中文本的更改。接下来,我将不得不添加其他触发器来触发来自分散在页面上的其他控件的更新面板的刷新,因此显然所有触发器源都不能在 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>

然后我得到错误:

无法在关联控件“TextBox1”上为 UpdatePanel“upIntendedStay”中的触发器找到名为“onchange”的事件。

好的,我在 UpdatePanel 中添加了一个文本框 TEXTBOX1,将“ClientId”更改为“ID”,将“OnChange”更改为“TextChanged”,它可以正常工作。但是如果文本框不在 UpdatePanel 中,我仍然会收到相同的错误。

触发文本框必须在更新面板内吗?这是一个苛刻的要求。
Dim trigger As New AsyncPostBackTrigger
'trigger.ControlID = dtmDateFirstEntry.TextBox.ID '<<<<<<<<<<<<<<<<<<<<<
trigger.ControlID = TextBox1.ID
trigger.EventName = "TextChanged"
upIntendedStay.Triggers.Add(trigger)

好的..当我将日历用户控件移动到“更新”面板时,出现此错误:

在 UpdatePanel 'upIntendedStay' 中找不到触发器的 ID 为 'txtDate' 的控件。

嗯。即使在更新面板中找到嵌入的控件,它显然也有问题,但是找到未嵌入用户控件中的纯文本框没有问题!

最佳答案

据我了解,文本框嵌入在用户控件 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 公开的事件。你知道怎么做吗?

关于asp.net - 更新面板错误 : Control with the ID "xxx" could not be found in the UpdatePanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2542469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com