0

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

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

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

所以这里有一个问题:当我单击该行(在 UpdatePanel 内,在“MainContent”区域内)上的编辑时,我怎样才能让它加载编辑页面?或者我只是以完全错误的方式解决这个问题。

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

4

2 回答 2

1

在 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>

希望这可以帮助

于 2014-03-08T00:58:07.667 回答
0

我找到了解决方案!这个关于用户控制事件的教程对我有很大帮助: 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 控件,并且管理控件现在处理加载/卸载查看和编辑控件及其各自的事件。

于 2014-03-18T16:29:34.460 回答