2008-09-11 66 views
5

我們正在構建CMS。該網站將由aspx頁面中的用戶構建和管理,但我們希望創建一個靜態HTML網站。 我們現在要做的方式是使用代碼我發現here重載Aspx頁面中的Render方法並將HTML字符串寫入文件。這對於單個頁面來說工作正常,但我們的CMS的事情是,我們希望從一開始就爲網站自動創建一些HTML頁面,甚至在創作者編輯系統中的任何內容之前。 有誰知道有任何方法可以做到這一點?將ASPX導出到HTML

回答

2

調用Render方法仍然非常簡單。只需創建一個頁面實例,創建一個存根WebContext以及WebRequest對象,並調用頁面的Render方法。然後,您可以隨意做任何你想要的結果。

或者,寫一點curlwget腳本來下載和存儲您想要製作靜態的任何頁面。

2

您可以使用wget(一個命令行工具)遞歸查詢每個頁面並將它們保存爲html文件。它會更新所產生html中的所有必要鏈接,以引用.html文件而不是.aspx。這樣,您可以將所有網站編碼爲使用服務器生成的頁面(更容易測試),然後將其轉換爲靜態頁面。

如果您僅僅出於性能原因需要靜態HTML,那麼我的偏好就是使用ASP.Net輸出緩存。

2

我建議你這樣做一個非常簡單的方法,不要在代碼中完成。它將允許您的CMS代碼執行CMS代碼應該執行的操作,並儘可能簡化操作。

使用產品,如HTTrack。它稱自己爲「網站複印機」。它抓取一個網站並創建html輸出。它快速而且免費。你可以讓它運行在你認爲最好的頻率上。

它將您的HTML輸出需求從您的CMS設計和實現中分離出來。它降低了複雜性,併爲您輸出HTML的方式提供了一定的靈活性,而無需在CMS代碼中引入失敗點。

1

@ckarras:我寧願不使用外部工具,因爲我希望以編程方式創建HTML頁面而不是手動創建。

@jttraino:我沒有時間間隔需要輸出站點 - 當用戶創建一個新站點時,輸出必須發生。

@Frank Krueger:我真的不明白如何使用WebContext和WebRequest創建我的頁面實例。

我在searchdotnet中搜索了「wget」,並得到了關於名爲WebClient的.net類的a post。它似乎做我想要的,如果我使用DownloadString()方法 - 從特定的URL獲取一個字符串。問題是,因爲我們的CMS需要登錄到,當方法試圖到達頁面時,它被扔到登錄頁面,因此返回login.aspx HTML ...

任何想法如何可以從這裏繼續嗎?

4

我似乎已經找到了解決方案,我的問題使用Server.Ecxcute方法。

我發現一個article是demonstared使用它:

TextWriter textWriter = new StringWriter(); 
Server.Execute("myOtherPage.aspx", textWriter); 

然後我做了的TextWriter幾個maniulatons,並將其插入到HTML文件。 Et瞧!有用!

+0

我發現文章太多了。我寧願找到這個更簡單的http://msdn.microsoft.com/en-us/library/fb04e8f7.aspx – 2011-10-17 15:30:07