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

标签 asp.net ajax visual-studio asp.net-ajax updatepanel

我的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/

相关文章:

asp.net - 如何让 Response.Redirect 指定 rel ="nofollow"?

ASP.NET 图表控件根据 X 轴标签上的 int 值设置月份名称

asp.net - ELMAH 未在 MVC3 中显示原始 ASP.NET 错误页面

javascript - 处理多个异步调用并等待所有调用完成后再更新状态

c# - 组标题 Crystal 报表中详细信息的总和

asp.net - 如何在不重新编译的情况下动态加载和切换Web应用程序(ASP.NET)中的资源文件?

jQuery load() 代码在 Google Chrome 中不起作用

java - 关于实现服务器端和客户端验证的问题

visual-studio - 重置 Visual Studio C++ 项目的设置

c# - 在 C# 命令行应用程序中包含并执行 EXE