我正在尝试添加一个动态创建的控件,但是我收到了这个错误:
'abc'的TargetControlID无效。找不到ID为'ctl00_MainContentPlaceHolder_divDetailsContent'的控件。
aspx页面如下所示:( PSEUDO CODE ALERT)
.
.
<panel id="myPanel" runat="server" ... >
<div id="divDetailsContent" runat="server" style="width:100%">
.
.
<% this.Controls.Add(GetAnimationExtender(myPanel)); %>
.
.
我已尝试过ID和ClientID属性,但仍然是错误。有什么想法吗?
编辑:
很多困惑的答案,这里是我的方法的较短版本,因为我评论了大部分内容,错误与此代码相同:
public static UpdatePanelAnimationExtender GetAnimationExtender(PlaceHolder loadingMessagePlaceHolder, Control targetControl, UpdatePanel targetPanel)
{
UpdatePanelAnimationExtender ae = new UpdatePanelAnimationExtender();
ae.ID = GenerateRandomControlID();
ae.TargetControlID = targetPanel.ClientID;
return ae;
}
它说它找不到TargetControlID但它将面板传递给它
答案 0 :(得分:1)
如果你在任何html控件中使用runat =“server”attr,那么你不需要说ClientID,而是使用ID和:
<div id="divDetailsContent" runat="server" style="width:100%">
.
.
<% this.Controls.Add(blah.GetControl(divDetailsContent.ID)); %>
.
.
public static Control GetControl(n)
{
.
.
blah.TargetID = n;
.
.
}
答案 1 :(得分:1)
Aaron有正确的想法 - 你的runat =“server”意味着你不需要冒汗clientID或UniqueID。这里真正的问题是:
// You're trying to call blah.GetControl using the control name
<% this.Controls.Add(blah.GetControl(divDetailsContent.ClientID)); %>
//Yet GetControl is static ? So what exactly is this function doing that it cannot find the control?
public static blah GetControl(n)
{
//How is blah a method and an object?
blah.TargetID = n;
}
编辑: 你正在设置ae.TargetControlID两次 - 你确定它两次都是正确的目标吗?
此外,您是否知道在指定TargetControlID之前是否需要将其添加到页面?可能需要在能够找到目标控件之前将其加载到页面上。
编辑2: 您将ae.TargetControlID设置为更新面板的ClientID。这是不正确的 - 它需要是UpdatePanel的ID。是否可以找到它我打赌将基于我之前提到的问题。
答案 2 :(得分:1)
目前尚不清楚你要做什么。如果此代码位于.aspx页面上,则添加
<div id="divDetailsContent" runat="server" style="width:100%">
到您想要的页面会自动将其添加到页面中。尝试使用this.Controls.Add
将其再次添加到父级将导致控制树的第二次呈现。这可能会导致意想不到的后果。
我认为使用runat = server添加div就足够了。
答案 3 :(得分:0)
解决了这个特殊问题......我不得不使用UniqueID。
现在我发现它必须在预渲染上完成,唉!但那是另一天的问题......