好的,我现在已经在这个主题上搜索了几个小时,似乎没有什么看起来像解决方案甚至是同样的问题。
我有一个包含两个内容区域的aspx页面:一个菜单和一个包含UpdatePanel和PlaceHolder的“MainContent”区域。目前,我可以单击菜单图标,它会将不同的ascx页面换成“MainContent”部分,没有回发 - 完美。
问题出在我尝试从其中一个页面中访问另一个页面时。 示例:“列表”页面显示数据行列表,其中每行有两个图标:“查看”和“编辑”。单击“查看”将显示一个模式弹出窗口,显示该项目的完整数据。单击“编辑”将转到该项目的“编辑”页面(ascx)。
以下是问题:当我点击该行上的编辑(位于UpdatePanel内部,在“MainContent”区域内)时,如何让它加载编辑页面?或者我只是以完全错误的方式解决这个问题。
更明确的例子:让我们说左侧菜单有3个项目:会话点,人物和地图。单击“People”,右侧的“MainContent”区域加载一个控件,该控件显示Person条目列表,每个条目都包含与其相关的信息的一部分。每个Person条目旁边都有一个Edit按钮。此编辑按钮应卸载“MainContent”区域中的“People”控件,并将其替换为“EditPerson”控件。请注意,页面上有N个编辑按钮,它们是每个Person条目的一部分,因此它们不能位于“People”控件之外。
答案 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控件及其各自的事件。