各位高手,小弟最近开发页面时遇到这样一个问题。用AjaxToolkit中的Dropdown之后,觉得挺好用的,只不过在Demo中下拉列表的Panel中,是写死的几个linkbutton,同时在下面注册了updatepanel,响应这几个linkbutton。我修改了一下,把这些写死的linkbutton用Repeater来展现,只不过在后台添加了AsyncPostBackTrigger后,前台页面依旧是postback的,不知道有什么问题。主要代码如下
页面上
<asp:Label ID="TextLabel" runat="server" Text="Select your favorite exotic ice-cream flavor"
Style="display: block; width: 300px; padding: 2px; padding-right: 50px; font-family: Tahoma;
font-size: 11px;" />
<asp:Panel ID="DropPanel" runat="server" CssClass="ContextMenuPanel" Style="display: none;
visibility: hidden;">
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="ItemDataBound">
<ItemTemplate>
<asp:LinkButton ID="lnk" runat="server" Text='<%# Bind("DisplayName") %>' CssClass="ContextMenuItem"
OnClick="OnSelect" />
</ItemTemplate>
</asp:Repeater>
</asp:Panel>
<ajaxToolkit:DropDownExtender runat="server" ID="DDE" TargetControlID="TextLabel"
DropDownControlID="DropPanel" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:connStr %>"
SelectCommand="SELECT [DisplayName], [UserCode], [FullName] FROM [plat_Users]">
</asp:SqlDataSource>
<asp:UpdatePanel ID="Update" runat="server">
<ContentTemplate>
<br />
<asp:Label ID="lblSelection" runat="server" Style="padding: 5px;" />
</ContentTemplate>
</asp:UpdatePanel>后台主要有以下代码
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
foreach (RepeaterItem item in this.Repeater1.Items)
{
AsyncPostBackTrigger tr = new AsyncPostBackTrigger(); LinkButton lk = (LinkButton)(item.FindControl("lnk"));
if (lk != null)
{
tr.ControlID = lk.ClientID;
tr.EventName = "Click";
this.Update.Triggers.Add(tr);
} }
}
另:如果updatepanel包括整个repeater则同样可以实现该效果,不过如果能用代码解决这个问题的话,我觉得还是这样比较好。不知道有谁遇到过这样的情况吗?
页面上
<asp:Label ID="TextLabel" runat="server" Text="Select your favorite exotic ice-cream flavor"
Style="display: block; width: 300px; padding: 2px; padding-right: 50px; font-family: Tahoma;
font-size: 11px;" />
<asp:Panel ID="DropPanel" runat="server" CssClass="ContextMenuPanel" Style="display: none;
visibility: hidden;">
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="ItemDataBound">
<ItemTemplate>
<asp:LinkButton ID="lnk" runat="server" Text='<%# Bind("DisplayName") %>' CssClass="ContextMenuItem"
OnClick="OnSelect" />
</ItemTemplate>
</asp:Repeater>
</asp:Panel>
<ajaxToolkit:DropDownExtender runat="server" ID="DDE" TargetControlID="TextLabel"
DropDownControlID="DropPanel" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:connStr %>"
SelectCommand="SELECT [DisplayName], [UserCode], [FullName] FROM [plat_Users]">
</asp:SqlDataSource>
<asp:UpdatePanel ID="Update" runat="server">
<ContentTemplate>
<br />
<asp:Label ID="lblSelection" runat="server" Style="padding: 5px;" />
</ContentTemplate>
</asp:UpdatePanel>后台主要有以下代码
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
foreach (RepeaterItem item in this.Repeater1.Items)
{
AsyncPostBackTrigger tr = new AsyncPostBackTrigger(); LinkButton lk = (LinkButton)(item.FindControl("lnk"));
if (lk != null)
{
tr.ControlID = lk.ClientID;
tr.EventName = "Click";
this.Update.Triggers.Add(tr);
} }
}
另:如果updatepanel包括整个repeater则同样可以实现该效果,不过如果能用代码解决这个问题的话,我觉得还是这样比较好。不知道有谁遇到过这样的情况吗?
Style="display: block; width: 300px; padding: 2px; padding-right: 50px; font-family: Tahoma;
font-size: 11px;" />
<asp:Panel ID="DropPanel" runat="server" CssClass="ContextMenuPanel" Style="display: none;
visibility: hidden;">
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemDataBound="ItemDataBound">
<ItemTemplate>
<asp:LinkButton ID="lnk" runat="server" Text=' <%# Bind("DisplayName") %>' CssClass="ContextMenuItem"
OnClick="OnSelect" />
</ItemTemplate>
</asp:Repeater>
</asp:Panel>
<ajaxToolkit:DropDownExtender runat="server" ID="DDE" TargetControlID="TextLabel"
DropDownControlID="DropPanel" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString=" <%$ ConnectionStrings:connStr %>"
SelectCommand="SELECT [DisplayName], [UserCode], [FullName] FROM [plat_Users]">
</asp:SqlDataSource>
<asp:UpdatePanel ID="Update" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Repeater1" EventName="ItemCommand" />
</Triggers> <ContentTemplate>
<br />
<asp:Label ID="lblSelection" runat="server" Style="padding: 5px;" />
</ContentTemplate>
</asp:UpdatePanel>