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 issue 和 ContentTemplate
当放在一个使用 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"; }
}
}
我有一个基本上具有以下设计的网络表单:
<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 issue 和 ContentTemplate
当放在一个使用 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"; }
}
}