我的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>
- Create a custom event in your UserControl ,例如称为
Naviated
- 在 LinkButton 的 Command-Event 中引发此事件
- 处理页面中 UserControl 的
Naviated
事件 - 调用
UpdatePanel1
Update
method以编程方式
为了稍微澄清一下事件驱动方法,假设这是您的 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/