【问题标题】:Replace User Control Inside PlaceHolder ASP.NET替换 PlaceHolder ASP.NET 中的用户控件
【发布时间】:2014-03-07 23:51:56
【问题描述】:

好的,我已经在这个主题上搜索了几个小时,但似乎没有任何解决方案甚至是相同的问题。

我有一个包含两个内容区域的 aspx 页面:一个菜单和一个包含 UpdatePanel 和 PlaceHolder 的“MainContent”区域。目前,我可以单击菜单图标,它会将不同的 ascx 页面交换到“MainContent”部分,没有回发——完美。

问题出在我尝试从其中一个页面中访问另一个页面时。 示例:列表页面显示数据行列表,其中每行有两个图标:查看和编辑。单击查看会弹出一个模式弹出窗口,显示该项目的完整数据。单击编辑会将您带到该项目的编辑页面 (ascx)。

所以问题来了:当我在该行(在 UpdatePanel 内,在“MainContent”区域内)单击编辑时,如何让它加载编辑页面?或者我只是以完全错误的方式处理这个问题。

更清晰的示例:假设左侧菜单有 3 个项目:谈话要点、人物和地图。单击“人员”,右侧的“主要内容”区域会加载一个控件,该控件显示人员条目列表,每个条目都包含与其相关的部分信息。每个人条目旁边是一个编辑按钮。此编辑按钮应卸载“MainContent”区域中的“People”控件并将其替换为“EditPerson”控件。请注意,页面上有 N 个 Edit 按钮,它们是每个 Person 条目的一部分,因此它们不能位于“People”控件之外。

【问题讨论】:

    标签: asp.net user-controls updatepanel asp.net-placeholder


    【解决方案1】:

    在 site.master 页面上创建这些占位符/区域,并使所有其他页面继承母版页。这样您就可以在所有后续页面中获得内容占位符。如果这还不足以让您入门,我可以给您一个示例。

    site.master

     <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div >
                <your menu>
            </div>
    
            <div>
                <asp:ContentPlaceHolder  runat="server" ID="**MainContent**" />   
            </div>
        </ContentTemplate>
    

    创建默认页面、编辑页面和任何其他要从 site.master 继承的页面

    这个“MainContent”是您在所有这些页面中的内容占位符。把你的内容放在里面

    <asp:Content runat="server" ContentPlaceHolderID="**MainContent**">
    
    
    </asp:Content>
    

    希望对你有帮助

    【讨论】:

    • 这几乎就是我的设置,除了我有几个嵌套的更新面板并且菜单在带有“MainContent”的菜单之外。不过这很好用。我需要做的是从 inside 当前加载到 MainContent 中的控件更改加载到 MainContent 中的控件。
    • 我唯一能想到的就是以某种方式让当前控件调用母版页中的一个方法,该方法将用所需的新控件切换当前控件。
    • 嗯,您所说的与我们对不再流行的 html 框架所做的类似。您能否解释一下“在 MainContent 中当前加载的控件内部”或发布一些代码
    • voddy:这是一个例子。假设左侧菜单有 3 个项目:谈话要点、人物和地图。单击“人员”,右侧的“主要内容”区域会加载一个控件,该控件显示人员条目列表,每个条目都包含与其相关的部分信息。每个人条目旁边是一个编辑按钮。此编辑按钮应卸载“MainContent”区域中的“People”控件并将其替换为“EditPerson”控件。请注意,页面上有 N 个 Edit 按钮,它们是每个 Person 条目的一部分,因此它们不能位于“People”控件之外。
    【解决方案2】:

    我找到了解决方案!这个关于用户控制事件的教程对我有很大帮助:http://asp.net-tutorials.com/user-controls/events/

    基本上,我所做的只是在占位符和处理每个事件和加载的查看/编辑控件之间添加一个层。

    基本上就是这样:

    <%@ Register TagPrefix="uc" TagName="ViewMyControl" Src="stuff/ViewMy.ascx" %>
    <%@ Register TagPrefix="uc" TagName="EditMyControl" Src="stuff/EditMy.ascx" %>
    
    <asp:ScriptManagerProxy //stuff />
    <asp:UpdatePanel //updatepanel stuff >
        <ContentTemplate>
            <uc:ViewMyControl runat="server" ID="ViewMyUserControl" OnEditItemClicked="ViewMyUserControl_EditItemClicked" Visible="true" />
            <uc:EditMyControl runat="server" ID="EditMyUserControl" OnSaveEditClicked="EditMyUserControl_SaveEditClicked" Visible="false" />
        </ContentTemplate>
        <Triggers> </Triggers>
    </asp:UpdatePanel>
    

    然后按照教程中的描述添加适当的事件触发/处理方法。

    重申一下:当您单击相应的菜单项而不是直接转到 View 控件或 Edit 控件时,母版页中的占位符控件现在加载此“管理”ascx 控件,并且管理控件现在处理加载/卸载 View 和 Edit 控件及其各自的事件。

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2011-01-17
      • 1970-01-01
      • 2012-08-03
      相关资源
      最近更新 更多