替换PlaceHolder ASP.NET中的用户控件

时间:2014-03-07 23:51:57

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

好的,我现在已经在这个主题上搜索了几个小时,似乎没有什么看起来像解决方案甚至是同样的问题。

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

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

以下是问题:当我点击该行上的编辑(位于UpdatePanel内部,在“MainContent”区域内)时,如何让它加载编辑页面?或者我只是以完全错误的方式解决这个问题。

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

2 个答案:

答案 0 :(得分: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>

希望这有帮助

答案 1 :(得分:0)

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

基本上,我所做的只是在Placeholder和View / Edit控件之间添加一个层来处理每个事件和加载。

它基本上只是这样:

<%@ 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控件或编辑控件时,母版页中的占位符控件现在加载此“管理”ascx控件,并且Manage控件现在处理加载/卸载View和Edit控件及其各自的事件。