簡體   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