2012-04-02 87 views
0

我們有幾個相當大的ASP.NET Web項目,我們已經被要求在一個選項卡式界面下進行組合。因此,例如,當您單擊標籤1時,我們會在下面顯示項目A.然後,如果您單擊選項卡2,我們將顯示項目B.我將下面的每個項目稱爲「應用程序」,因爲它們爲我們的用戶執行不同的功能。選項卡式應用程序中的多個.NET應用程序

有沒有人有一個很好的方法來做到這一點?這裏的一個關鍵問題是每個應用都必須記住狀態。因此,如果用戶在App A/Tab 1上填寫Web表單的一半,然後他們點擊另一個標籤做一些工作,當他們回到應用程序A /標籤1時,他們應該看到他們的半完成表單(尚未保存到數據庫)。

我們討論了幾種選擇:iframe可能是一種可能性,但我們害怕對這些做出承諾,因爲它們可能會失寵並且可能會調整大小和打印問題。我們不認爲我們可以簡單地將每個應用嵌入到a中,並且在標籤之間單擊時隱藏/顯示它,因爲如果打開了很多標籤頁,頁面的大小會變得非常大,並且在.NET中會出現問題應用程序/頁面觸發回傳(我們的許多應用程序使用傳統的.net回發)。

在某些方面,我們基本上被要求編寫一個瀏覽器,在每個選項卡中都有一個.net應用程序。我們實際上不能使用瀏覽器來執行此操作,因爲我們無法強制瀏覽器打開新的選項卡(而不是單獨的窗口)。

有沒有人有任何想法如何「包裝」多個.NET應用程序到一個選項卡式的用戶界面?或者這是不可能的?或者註銷iframe解決方案是錯誤的?每個.net項目都可以在不可見時簡單隱藏的iframe中呈現。

謝謝。

+0

哪種技術? Winform/wpf? – 2012-04-02 15:05:46

+0

將帶有選項卡控件和WebBrowser控件的winforms應用程序工作嗎? – 2012-04-02 15:09:33

+0

這些是ASP.NET webform項目。每個執行一個特定的功能,這就是爲什麼我稱爲一個應用程序。這是針對金融公司的,所以一個「應用程序」可能提供交易信息,另一個可能提供股票市場研究。所有執行.NET頁面回發。 – user1308260 2012-04-02 15:15:44

回答

0

我開發了一個自定義MVC框架的項目。在選項卡內部,每個選項卡(應用程序)都有一個控制器。數據將使用視圖狀態或每個應用程序使用的模型持久保存在共享視圖中。

+0

你能給我一些更詳細的信息嗎?在離開之前,你如何獲取每個頁面的狀態(以便稍後再顯示)? – user1308260 2012-04-02 15:24:08

+0

@ user1308260在標籤頁面上工作時,您並未真正離開,而只是更改可見的控件。你似乎離開用戶端,但你仍然在同一個表單中。唯一一次改變你的用戶生氣將會失去,當refresh()/ reload()方法被調用,當然當關閉表單時。這是因爲所有的控件都必須使用數據源是模型的bindingSource。該模型在從控制器刷新期間獲取,在保存之前不會影響數據庫。 – 2012-04-02 18:44:21

+0

@ user1308260該視圖將只包含一個新的控制器實例,綁定源,模型和您的控件。所有的邏輯都在控制器中。 – 2012-04-02 18:45:57

0

一個可能的解決辦法是:

  • 修改現有的WPF/WinForms的應用程序,以便在主窗口包含 只是一個用戶控件。所有的應用程序邏輯應該是包含在用戶控件中的 或者包含在用戶控件中的元素。
  • 創建一個包含對其他應用程序的程序集引用的「shell」應用程序。
  • 將用作「主」屏幕的用戶控件放入選項卡中。您可以使用WindowsFormsHost將Windows窗體控件託管在WPF應用程序中(反之亦然,使用ElementHost)。

問題仍然是必須保持狀態的對話框,這可能會在更改選項卡時出現問題。

+0

對不起,我應該在我最初的帖子中澄清說這些是.NET webform項目(不是贏得應用程序)。 – user1308260 2012-04-02 15:20:54

+0

這是根據OP基於Web的應用程序,他是在談論I幀和瀏覽器 – 2012-04-02 15:21:00

0

選項1 爲「選項卡」創建一個自定義服務器控件,並在您要用選項卡導航到的每個應用程序中引用它。您將完全控制每個應用程序中的「單擊」事件選項卡,以便您可以保存狀態。如果需要將每個應用程序或部署爲同一網站上的虛擬目錄,則每個應用程序都可以是自己的網站。

我可能會從代碼中拉出標籤配置,並將其放入配置文件或數據庫中,以便您可以從標籤UI添加和減去應用程序,而無需重新編譯和重新部署選項卡控件。

選項2 創建一個「母版頁」,然後讓頁面中的javascript隱藏並顯示其中的每個應用程序的iframe。您可以使用JavaScript來確保iframe始終最大化爲內容大小。使用iframe,您不必擔心狀態,因爲它們全都會在瀏覽器中同時顯示。

可能的問題:

  1. 超時,如果應用程序是隱藏的,沒有得到輸入,將它超時?
  2. 跨域腳本,如果他們不都在同一個域
  3. 打印效果可能取決於你如何想需要自定義編碼的解決方案它看起來
+0

所以你說,當用戶點擊選項卡中,每個應用程序將不得不拯救它自己的狀態呢?難道要保存一半輸入的表格 - 每個表格都有不同的屬性/字段?或者有什麼辦法一般保存任何網頁表單的全部內容?謝謝你的想法。 – user1308260 2012-04-02 15:49:57

+0

我認爲你已經控制了應用程序代碼。我沒有看到如何在沒有這種控制的情況下維護應用程序狀態。 – DancesWithBamboo 2012-04-02 15:58:21

+0

雖然我寧願不必重寫代碼,但我確實可以控制它。你能告訴我一個應用程序如何保存狀態,當這個狀態在許多不同的Web表單上有所不同時?例如,一個頁面可能會根據下拉選項在其上過濾數據。另一個頁面可能更多是一個典型的帶有輸入框/框的Web表單來填充文本數據。每個人都不需要「硬編碼」來保存離開前輸入的數據嗎?如果是這樣,那麼這不是一個巨大的任務嗎?也許你說這就是我必須做的。再次感謝。 – user1308260 2012-04-02 17:45:22

相關問題