如何解决是否可以动态加载 .aspx 页面?
我今天收到一个新要求:对于我们的产品页面,他们希望根据产品类型使用完全不同的布局。
例如,假设我们出售水桶。目前,所有存储桶都使用完全相同的页面布局。但是现在,他们希望木桶使用当前的布局,而塑料桶使用完全不同的布局。但是,他们希望 URL 保持不变(例如 domain.com/bucket/1),所以我不能只是将塑料桶转发到新页面。
当前页面结构如下:
CurrentMasterPage.master > CurrentProductPage.aspx > Several UserControls
新的布局需要新的页面(即,当前的页面都没有被重用):
NewMasterPage.master > NewProductPage.aspx > Several UserControls
我的第一个想法是将 CurrentProductPage.aspx 中的所有标记和代码放入一个 UserControl,然后为新布局 (NewProductPage.aspx) 创建第二个 UserControl,并让 CurrentProductPage.aspx 动态加载适当的UserControl 基于产品类型,但是,这不起作用,因为新布局需要新的 MasterPage,而我无法从 UserControl 引用 MasterPage。
然后,我想到了使用 URL Rewriting,但我认为让相同的 URL 加载两个不同的页面是不可能的。
有没有办法做到这一点?
解决方法
为什么不使用 100% 服务器端重定向?
当您使用 response.Redirect("some different page") 时。然后向客户端浏览器发送该页面的全新副本,并且 URL 将被更新。
但是,服务器端可以写它想写的任何页面。客户端甚至不会知道服务器决定为给定的 URL 分配不同的页面。
因此,您可以拥有一个带有假标签作为按钮的页面。当用户点击按钮时,浏览器往返行程开始(对于给定的 URL)。但是在服务器端,您可以为该 URL 分配一个不同的页面。
因此,代替这种经典的“往返”,您可以使用:
Server.TransferRequest("MyotherWebPage")
因此,对于给定的 URL,在当前页面(基于给定的 URL)被发送回浏览器之前,上面的内容将简单地抽出一个不同的页面。当前页面永远不会返回到浏览器。
事实上,对于具有大量按钮和功能的丰富页面,您可以更改显示的页面。所以在加载时 - 简单地代替“response.Redirect”,使用 server.Transfer。当前页面永远不会到达客户 - 您在哪里分发的页面。因为客户端对 Web 服务器决定发出的内容零线索 - 它也将零线索表明不同的页面被发送回客户端。
用测试页试试上面的方法。
在页面 A 上,在标准按钮后面,跳转到网页 B
例如:
Response.Recdirect("MyPageB.aspx")
注意 URL 更改 - 经典往返。
现在,使用按钮执行此操作:
Server.Redirect("MyPageB.aspx")
在这种情况下,不会发生完整的往返。服务器直接传输到新页面并将其发送出去。 (并注意您的网址是如何不改变的)。
,您可以使用母版在页面上的 PreInit
上更改母版页。这是可能的,因为 Master 基本上与 User Control 相同,并且在页面代码后面加载。
protected void Page_PreInit(object sender,EventArgs e)
{
if (NewProductPage)
{
MasterPageFile = "~/NewMasterPage.master";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。