当前位置: 首页 > 面试题库 >

更新面板错误:在UpdatePanel中找不到ID为“ xxx”的控件

周马鲁
2023-03-14
问题内容

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

在ASPX页面中,我有一个此usercontrol的实例:

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

如何刷新此更新面板,将更改为日期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>

然后我得到错误:

在相关控件“ 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)

OK ..当我将日历用户控件移到“更新”面板中时,出现以下错误:

在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公开的事件。你知道怎么做吗?



 类似资料:
  • 问题内容: 我有一个更新面板,其中将Conditional和ChildrenAsTriggers的UpdateMode设置为false。我只希望一些控件引起异步回发: 尝试加载此页面时出现以下错误: 由于我的btnAddSomething控件位于转发器中,可能不会立即存在,因此它的行为就好像它不存在一样。我该如何解决? 问题答案: 因为您的控件在中,并且不在的范围内。顺便说一下,您不需要,因为您的

  • 问题内容: 昨天我将Android Studio升级到了3.0版,但是我正在使用LibGdx,升级后无法构建我的项目。 当我尝试构建时,它给了我一个错误: 错误:(2,0)找不到ID为’jetty’的插件 我该如何解决? 问题答案: 目前已弃用的 html模块 已在Gradle 4.1版本中删除。 Android Studio 3.0使用和 LibGDX中尚不支持Gradle 4.1,对此存在一个

  • 问题内容: 关于这个问题已经有其他问题了,但是没有一个是真正有用的。我是Symfony的新手,因此很难直面它。 我在文件Client \ IntranetBundle \ LDAP \ LDAPAuthenticationProvider.php中,此代码导致错误: 我确实添加了它的命名空间: LDAPUser实现UserInterface 我得到的错误是 那应该是什么意思?根据我的阅读,它与映射

  • 问题内容: 我有一个包含两个ContentPlaceHolders的页面。一个具有DropDown,另一个具有内容的UpdatePanel。 当它们位于不同的ContentPlaceholders中时,如何通过DropDown的selectedItemChanged事件触发对UpdatePanel的更新? 由于UpdatePanel1不了解DropDown1,因此以下操作无效: 一种方法是制作一个

  • 我正在写一个Spring MVC,并坚持以下错误: 18:34:44999警告[org.springframework.web.context.support.XmlWebApplicationContext](MSC服务线程1-1)在上下文初始化过程中遇到异常-取消刷新尝试:org。springframework。豆。工厂BeanCreationException:创建名为“org”的bean时

  • 错误:找不到:com.google.android.gms:play-services:5.2.8 我已经检查了更新的sdk位置是否由Android Studio使用 我已经安装了Google存储库和Android支持存储库,它们都是最新的。 我还有一个ANDROID_HOME局部变量指向我实际使用的sdk