2009-09-30 124 views
1

在我的asp.net-mvc應用程序中,我需要包含一個顯示遺留頁面的頁面。 通過調用現有的Perl腳本創建此頁面的主體。 這個Perl腳本是外部託管的。服務器端包含外部HTML?

有沒有辦法做這樣的事情:

<!-- #Include virtual="http://www.example.com/theScript.plx"--> 

回答

2

還不如直接包括,因爲ASP.NET server-side-includes需要的頁面,以在服務器上編譯。

當頁面加載時,您可以使用jQuery從該URL下載HTML,不過我明白這並不完美。

另外(我不知道這是否會起作用),你可以從你的ASP.NET MVC控制器執行一個WebRequest到perl網頁,並把得到的HTML作爲文本放到視圖中。這樣你可以利用諸如output caching之類的東西來限制perl頁面的點擊次數,如果它不經常改變的話。

0

您可以通過簡單地使用框架並將框架源設置爲需要包含的url來以低調的方式實現這一點。這很簡單,可以在沒有任何服務器或客戶端腳本的情況下關閉,所以如果可能的話,這將是我的首選方法。

但是,如果您希望html看似來自您的服務器,那麼您需要手動包含它 - 通常使用WebRequest,正如Neil所說。不過,您可能希望緩存遠程頁面的性能,因爲它是一個perl腳本,我假設該頁面是動態的,所以這可能不是一個好主意。

1

如果您想一次完成所有工作,您可以從服務器執行HTTP請求並將內容寫入頁面?

事情是這樣的:

Response.Write(GetHtmlPage("http://www.example.com/theScript.plx")); 

調用此方法:

public String GetHtmlPage(string strURL) 
{ 
    // the html retrieved from the page 
    String strResult; 
    WebResponse objResponse; 
    WebRequest objRequest = System.Net.HttpWebRequest.Create(strURL); 
    objResponse = objRequest.GetResponse(); 
    // the using keyword will automatically dispose the object 
    // once complete 
    using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())) 
    { 
     strResult = sr.ReadToEnd(); 
     // Close and clean up the StreamReader 
     sr.Close(); 
    } 
    return strResult; 
} 

(大多數代碼從here公然撕裂,因此不選中)

+0

我採取了類似的做法在第一。我的控制器將獲得HTML並通過TempData傳遞它。然而,從plx返回的結果是整個頁面(包括頭部,主體等)以及相關鏈接。無論如何,它必須進入一個框架。 – 2009-10-01 07:40:52

+0

啊,我明白你的意思了,鮑里斯。一個框架可能是要走的路,除非你想走下去剝離你不需要的html的路徑 - 我不會推薦:) – Damovisa 2009-10-05 00:19:32

+0

或者,你可以先清除響應,然後寫出頁面,但是你只會發送來自其他服務器的響應。如果有標準的佈局,菜單或任何其他需要發送的html,則會丟失它。 – Damovisa 2009-10-05 00:20:49