2008-10-31 77 views
3

我有我認爲是一個非常標準的網絡接口。標籤導航 - 框架還是AJAX?

有4種不同的ListViews(網格控件)可以通過頂部的一系列選項卡訪問。

我已經實現此,如下所示:第1頁包含網格線1

alt text http://img402.imageshack.us/img402/1530/pagedu8.jpg

標籤1將加載到幀2表2將第2頁包含網格線2裝入幀2等

然而,這意味着如果您單擊網格中的某個項目,並將DetailsPage1.aspx加載到第2幀中,則第1幀和選項卡仍然可見並處於活動狀態。

我已經被建議我應該只有一個框架,並使用HttpRequest(或WebRequest在asp.net中)基於標籤點擊動態加載頁面。

這是正確的方法嗎?如果您有任何資源或技巧手頭,將不勝感激!

感謝

回答

4

框架是一個絕對的禁忌。使用其他技術無法實現的畫框沒有任何好處。

這是否意味着您必須使用AJAX?不必要。如果您覺得需要提供豐富,無縫的界面,那麼AJAX是一個非常好的解決方案,但並非絕對必要。

您可以使用服務器端包含將您的選項卡分隔成另一個(公共)子頁面,但自從您提到ASP.NET(假設您運行的是Framework v2或更高版本),您可能需要使用Master頁面,其中您的選項卡位於一個內容部分或主頁本身中,並且您的網格/詳細信息位於另一個內容部分。

這兩種技術之間的主要區別在於,使用AJAX,從標籤到標籤的過渡將是光滑而無縫的,但a)它需要一些額外的工作(特別是如果您不熟悉任何AJAX框架)和b)由於你基本上有4頁合併成一頁,頁面「更重」並且維護起來更復雜。如果您選擇非AJAX路由,關鍵區別在於,當您單擊每個選項卡時(因爲每次都加載一個新頁面),會有一個小但不同的刷新效果。

當然,母版頁對於保持一致的網站風格和結構非常有用,所以沒有理由不能在主頁系統中使用AJAX。

3

框架是跛腳:你會得到的問題,如果用戶要設置書籤,如果用戶通過谷歌訪問您的網站:那麼你的導航框架是不可見的。所以你需要很多骯髒的JavaScript。檢查這一點。如果你需要JavaScript,從一開始就做,並使用AJAX

1

你試過TabContainer或加載所有4個細節窗格,只顯示/隱藏面板選項卡選擇更改?

根據您的用戶將看到的屏幕,如果您動態加載詳細視圖(Ajax或回發),您可能無法堅持用戶輸入的任何信息,並且您將等待(用戶不想等待)

2

Ajax是最好的選擇。但請記住通過後退/前進使其可以瀏覽。最好的選擇是改變頁面散列。我使用的是這樣的:

domain.com/#tab1的第一個選項卡 domain.com/#tab2的第二個選項卡

等。

如果你使用jQuery,this可以是一個好的開始(我使用它,我沒有問題)。我確信有一個解決方案,但所有流行的框架雖然:)

2

而不是使用框架,你應該只包括您的導航頁面在所有其他網頁。瀏覽器將會看到您在所有頁面中包含相同的文檔並將其緩存。

1

我會推薦使用jQuery和jQuery UI插件。不需要框架,只需要div容器。

1

和StingyJack一樣,我建議看一下TabContainer控件,但是如果你這樣做的話,你可能需要注意你的ViewState不會太大。

因此,例如,不要將任何東西加載到GridView中,直到該Tab被查看,並且如果它不是,則刪除它的內容(當然,如果需要的話,則保存回數據庫使用TabContainer的ActiveTabChanged事件對於這個策略。您爲網格禁用ViewState,但將其留在容器中。

+0

Hmobius你能解釋一下,這可能是非常有用的。在ActiveTabChanged事件中,如何禁用網格上的ViewState?例如,如果(tab.index == 1){//如何禁用gridview1的ViewState}?謝謝! – Sean 2008-10-31 13:44:56

+0

選項卡中的每個控件都具有EnableViewState =「false」,那麼當運行activetabchanged時,任何核心信息(所選任何內容的關鍵值,排序值等)都將保存到whoel控件的ViewState中,並且之前的任何lsit項目都將被刪除在新的控件中填充控件。 – Hmobius 2008-11-06 13:05:55

-1

切勿使用幀(或iFrame爲此事),除非你絕對必須 ...我能想到的使用

的唯一有效原因(我)框架實際上是在文件上傳控件,並我不知道它在那裏是有效的...