2010-11-01 30 views
1

我有一個'經典'的ASP.NET應用程序(.NET 3.5)與一個漂亮的標準runat="server"樣式窗體與服務器端控件和'Execute'asp:button。在代碼隱藏中,executeButton_click處理程序處理一些其他控件,運行報告並將結果放入asp:label。因此,按下Execute按鈕的效果是整個頁面會隨着插入到標籤中的報告而重新加載。從代碼隱藏(.aspx.cs)類更改視圖(.aspx)

我需要改變這個,這樣當按下Execute按鈕時,報告將彈出一個新窗口,其佈局不同(即沒有控件和窗體)。如果我在MVC框架中這樣做,我只需更改「執行」操作中的視圖模板,因此ASP.NET的模擬器將更改前面的代碼,即代碼中使用的.aspx文件 - 課後。

這可能嗎?我知道.aspx和.aspx.cs之間的鏈接並不是非常緊密,因爲可以在多個.aspx文件中重用代碼隱藏類。那麼我可以設置.aspx文件從代碼隱藏中渲染嗎?

回答

1

通常你會使用

Response.Redirect("UrlToNewPage.aspx"); 

不過,如果你需要訪問的原始形態上有你可以採取另一種方法在控件的屬性將用戶引導到新的一頁。將asp:按鈕的「PostBackURL」屬性更改爲第二頁。然後在第二頁上,在aspx文件的頂部設置(@Page PreviousPageType)指令,這告訴這個頁面它打算作爲來自page1.aspx的帖子的目標。然後,在第二頁後面的代碼中,您可以使用Page.PreviousPage屬性訪問第一頁上的控件

爲了代碼共享的目的,您可以創建一個基類,並且同時具有兩個aspx.cs類從此基類繼承類如果你想共享代碼。

+0

表單中的控件需要處理並用於生成報告。重定向會失去這些價值嗎? – 2010-11-01 21:54:02

+1

當您執行重定向時,您將失去表單上的任何值。有幾種方法可以解決這個問題,1)在重定向之前將值存儲在數據庫中,然後在新頁面中檢索它們。 2)將asp:按鈕的「PostBackURL」屬性更改爲第二頁。然後在第二頁上,在aspx文件的頂部設置(@Page PreviousPageType)指令,這告訴這個頁面它打算作爲來自page1.aspx的帖子的目標。然後,在第二頁後面的代碼中,可以使用Page.PreviousPage屬性訪問第一頁上的控件。 – eoldre 2010-11-01 22:09:10

+0

謝謝@eoldre。使用PostBackURL,將page1.aspx.cs中的控件設置爲public,並在page2中使用'(page1)this.PreviousPage'完美工作。如果你能更新你的答案,我會接受它;-) – 2010-11-01 23:41:14

0

我認爲這是不可能的,因爲ASP.NET的工作方式。 ASP.NET中的視圖文件被ASP.NET引擎動態編譯爲代碼隱藏類的子類。當URL被請求時,子類是實例化和執行的。更改代碼隱藏類的視圖試圖更改具體類型。我們可以從單個代碼隱藏類繼承多個.aspx文件,但反之亦然。

非ASP.NET框架將能夠做到這一點,因爲該視圖只是一個模板文件,在控制器動作完成後由框架即時處理,因此可以更改視圖而不會打擾繼承的問題。