gpt4 book ai didi

asp.net - 如何动态创建UpdatePanel触发器

转载 作者:行者123 更新时间:2023-12-02 20:37:42 24 4
gpt4 key购买 nike

我的default.aspx页面中有一个UpdatePanel,并且UpdatePanel有asp占位符,我还有一个ascx控件,它是网站的导航,它是根据数据库中的数据动态创建的,每个导航项都是一个 ImageButton,并且 DataList 中的每个循环都有每个对应的 ascx 控件的 URL 的 HiddenField 值,例如 Value="~/controls/somecontrol.ascx"

这是我想要/需要做的:我需要为我的 ascx 导航控件中的 default.aspx 中的 UpdatePanel 动态创建触发器,所以我真正想要做的是我的每个导航项(即“ImageButton”)成为此 UpdatePanel 的触发器,并且当你点击它,它会引用UpdatePanel中的占位符并根据NavigateUrl路径加载控件并执行placeholder.Controls.Add(mycontrol)。

默认.aspx页面:

 <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="phMainHolder" runat="server"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>

导航 ascx 控件:

<asp:DataList ID="dlnavigations" runat="server"  RepeatDirection="Horizontal" 
onitemcommand="dlnavigations_ItemCommand" OnItemDataBound="dlnavigations_ItemDataBound">
<ItemTemplate>
<asp:HiddenField ID="hfURL" Value='<%#Eval("strUrl")%>' runat="server" />

<asp:ImageButton ID="imgTab" Width="20" CommandArgument='<%#Eval("ID")%>'
ImageUrl='<%#Eval("strIcon")%>' runat="server" />
</ItemTemplate>
</asp:DataList>


protected void dlnavigations_ItemCommand(object source, DataListCommandEventArgs e)
{
HiddenField hfURL = (HiddenField)e.Item.FindControl("hfURL");
Control ctrl = LoadControl(hfURL.Value);
myplaceholderinUpdatePanel.Controls.Clear();
//here i need to reference my placeholder in UpdatePanel then
myplaceholderinUpdatePanel.Controls.Add(ctrl);

}

我不太确定这是否真的可以用 UpdatePanel 来实现,请提供任何帮助,如果我不能用 UpdatePanel 来实现,还有其他方法可以实现相同的概念吗?

谢谢。

最佳答案

如果我正确理解了您的要求,我会建议另一种方法:

设置UpdatePanel1 UpdateMode property有条件

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="phMainHolder" runat="server"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>

为了稍微澄清一下事件驱动方法,假设这是您的 UserControl 的代码隐藏:

public partial class Navigation : System.Web.UI.UserControl
{
public delegate void NavigationHandler(int ID);
public event NavigationHandler Navigated;

void LinkButton_Command(Object sender, CommandEventArgs e)
{
int ID=int.Parse(e.CommandArgument.ToString());
Navigated(ID);
}
}

您的页面可以通过以下方式处理此事件:

protected void Page_Init(object sender, EventArgs e) {
this.Navigation1.Navigated += UserNavigated;
}

protected void UserNavigated(int ID){
//do whatever you need to do and then call...
UpdatePanel1.Update();
}

关于asp.net - 如何动态创建UpdatePanel触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9674874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com