2010-03-15 204 views
0

這是我的場景。用戶填寫這個基於DB值動態創建的大頁面。這些值可能會改變。當用戶填寫頁面並點擊提交時,我們希望將頁面副本保存爲服務器上的html,這樣,如果文本或文字發生更改,當他們返回查看其發佈的信息時,這在歷史上是準確的。將HttpResponse /請求保存到文件系統

所以基本上,我需要做到這一點

protected void buttonSave_Click(object sender, EventArgs e) 
{ 
    //collect information into an object to save it in the db  
    bool result = BusinessLogic.Save(myBusinessObject); 

    if (result) 
     //!!! Here is where I need to save this page as an html file on my servers IFS!!!! 
    else 
     //whatever 

    Response.Redirect("~/SomeOtherPage.aspx"); 
} 

任何幫助是極大apprciated。另外,我不能只是從url請求數據,因爲在這種情況下,查詢字符串參數是一個很大的問題。把數據庫信息(在其最高級別)上的關鍵是全部在會話中,所以我不能只請求一個url並保存它。

謝謝!

+2

這是比你想象的更困難的問題。請記住,HTML文檔由很多部分組成。 JavaScript,圖像,CSS等...所有這些東西一起由一個合成圖像的瀏覽器呈現。您必須在服務器端使用的響應將只是靜態HTML。如果您真的想保留用戶「看到」的內容,則還需要解析對圖像和CSS的所有引用,並將其渲染爲圖像。自己寫這樣的東西就好像建立一個瀏覽器一樣...... – Josh 2010-03-15 21:01:42

回答

0

你將不得不在這裏處理一些問題。

首先,如果我理解你正確地你想,因爲它是產生攔截HTML。您可以通過多種方式完成此操作 - 即可以編寫一個Filter對象 - System.IO.Stream實現,該實現除了通過原始HTML數據流傳遞外,還可以將其複製。這個對象可以通過它的Filter屬性連接到HttpResponse。

請發送到的HttpResponse並不是所有的數據允許過濾頭腦。

然後,你將不得不面對另一個問題:由當時的「保存」的要求擊中了你的服務器原始網頁已經一去不復返了。它是作爲前一次請求/響應往返的結果發送給用戶的,因此除非您有方法在第二次往返中重新創建html,否則必須在第一次往返時臨時保存它,並在「提交」第二個 - 當你的buttonSave將被執行。

+0

看起來我只是想通過ABCPDF來保存它。儘管我很喜歡這個答案,可能一些初步的測試表明它將是一條可行的路。謝謝! – chrisjlong 2010-03-16 12:54:07

1

我覺得在「其他情況下」你可以調用一個HTMLSnap類型的控件,它將URL的快照作爲圖像。但是這不會讓用戶輸入值。它在加載時將具有頁面的快照。

http://www.guangmingsoft.net/htmlsnapshot/help.htm

至於其他用戶提到u能不能得到與自HTML頁面用戶輸入的值有所有其他資源,以及這是艱難的齧合獲得在服務器端。

如果妳不interestred用戶輸入的上述內容的方法可能會奏效。