VS 2010 自动完成无法识别 DataList ItemTemplate 中添加的控件(asp.net 或 Telerik)?

VS 2010 Autocomplete not recognizing control (asp.net or Telerik) added in DataList ItemTemplate?

我有一个基本上具有以下设计的网络表单:

<form id="form1" runat="server">
    <div>
         <asp:DataList>
            <ItemTemplate>
                <div>
                    <asp:LinkButton>
                    </asp:LinkButton>
                    <asp:Button ID="ButtonItemTemplate" runat="server" Text="Button" />
                </div>
            </ItemTemplate>
        </asp:DataList>
    </div>
    <asp:Button ID="ButtonBeforeFormEndTag" runat="server" Text="Button" />
</form>

工具箱,我拖放两个asp:Button控件:一个就在</form>之前结束标记 (ID ButtonBeforeFormEndTag) 和内部标记 DataList.ItemTemplate (ID ButtonItemTemplate).

Page_Load 代码隐藏中,我刚刚添加了如下代码:

protected void Page_Load(object sender, EventArgs e)
{
    ButtonBeforeFormEndTag.Text = "Placed Form End Tag";
    ButtonItemTemplate.Text = "Placed in Item Template";
}

Build 期间,出现错误 The name 'ButtonItemTemplate' does not exist in the current context

我尝试将它添加到网络表单设计中,在网络表单标记中,并且我尝试将控件标记从正确创建它的地方移动到 ItemTemplate,但尽快当它移到那里时,它就不再存在了。 ItemTemplate 就像任何控件的模糊地带。

如果 none 控件在 自动完成 中被识别,我会理解,但不知道为什么 VS 只识别一个而不识别另一个。

所以我的问题是:为什么控件在 DataList 之外被识别,但在 DataList.ItemTemplate 内却不被识别?

这样做的原因是 Telerik RadButton 有一个 reported issueContentTemplate 当放在一个使用 ItemTemplate 的控件中时,就像 DataList ].

解决方法是在代码隐藏中设置按钮控件的内容,这实现了,因为它不能在 Page_Load 中完成,这正是 Telerik 所建议的。但我无法设置 Telerik 控件,因为自动完成无法识别 ItemTemplate.

中的控件

谢谢。

你不能直接访问它们,因为它在<ItemTemplate>里面,所以简单的方法是使用DataList的OnItemDataBound事件。可以像下面这样实现:

标记的更改:

<asp:DataList ID="DataList1" OnItemDataBound="DataList1_ItemDataBound">.... </asp:DataList>

c#

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Button btnTemplate = (Button)e.Item.FindControl("ButtonItemTemplate");
        if (btnTemplate != null) { btnTemplate.Text = "Placed Form End Tag"; }
    }
}