繁体   English   中英

是否可以动态加载 an.aspx 页面?

[英]Is it possible to dynamically load an .aspx page?

我今天接到一个新需求:对于我们的产品页面,他们希望根据产品类型使用完全不同的布局。

例如,假设我们卖水桶。 目前,所有存储桶都使用完全相同的页面布局。 但是现在,他们希望木桶使用当前的布局,而塑料桶使用完全不同的布局。 但是,他们希望 URL 保持不变(例如,domain.com/bucket/1),所以我不能只将塑料桶转发到新页面。

当前页面结构如下:

CurrentMasterPage.master > CurrentProductPage.aspx > Several UserControls

新布局需要新页面(即,当前页面均未重复使用):

NewMasterPage.master > NewProductPage.aspx > Several UserControls

我的第一个想法是从 CurrentProductPage.aspx 获取所有标记和代码并将其放入 UserControl,然后为新布局创建第二个 UserControl (NewProductPage.aspx),并让 CurrentProductPage.aspx 根据产品类型,但是,这不起作用,因为新布局需要新的 MasterPage,而我无法从 UserControl 引用 MasterPage。

然后,我想到了使用 URL 重写,但我认为不可能让同一个 URL 加载两个不同的页面。

有什么办法可以做到这一点?

为什么不使用 100% 服务器端重定向?

当您使用 response.Redirect("some different page") 时。 然后客户端浏览器发送该页面的全新副本,URL 将被更新。

但是,服务器端可以写任何它想写的页面。 客户端甚至不知道服务器决定为给定的 URL 抛出一个不同的页面。

因此,您可以拥有一个带有假选项卡作为按钮的页面。 当用户点击一个按钮时,浏览器往返开始(对于给定的 URL)。 但是在服务器端,您可以为该 URL 提供不同的页面。

因此,代替这个经典的“往返”,您可以使用:

Server.TransferRequest("MyotherWebPage")

因此,对于给定的 URL,在当前页面(基于给定的 URL)被发送回浏览器之前,上面的代码将简单地抽出一个不同的页面。 当前页面永远不会返回到浏览器。

事实上,对于包含大量按钮和功能的丰富页面,您可以更改显示的页面。 所以在加载时 - 简单地代替“response.Redirect”,使用 server.Transfer。 当前页面永远不会到达客户端 - 你抛出的那个页面。 因为客户端对 web 服务器决定发送什么内容的线索为零 - 它也对将不同的页面发送回客户端一无所知。

用测试页试试上面的方法。

在A页,一个标准按钮后面,跳转到web B页

例如:

Response.Recdirect("MyPageB.aspx")

注意 URL 变化——经典往返。

现在,使用按钮执行此操作:

Server.Redirect("MyPageB.aspx")

在这种情况下,不会发生完整的往返行程。 服务器直接转移到新页面并将其发送出去。 (并注意您的 URL 如何保持不变)。

您可以使用母版在页面上的PreInit上更改母版页。 这是可能的,因为主控件与用户控件基本相同,并且在页面代码隐藏之后加载。

protected void Page_PreInit(object sender, EventArgs e)
{
    if (NewProductPage)
    {
        MasterPageFile = "~/NewMasterPage.master";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM