0

首先我不確定這是這個問題的正確標題,但希望我會做得更好,試圖解釋我需要完成的事情。加載和顯示上下文特定的常見問題

介紹

我想要做的就是加載相對於我在網頁的常見問題的信息。所以說,我在www.domain.com/items/index頁面上,我想加載描述在這個頁面上可以完成什麼的常見問題解答信息以及可用的選項......等等。然後,用戶翻轉一個搜索欄,我想要顯示(在頁面的旁邊)一個簡短的文字,描述搜索框以及它是如何工作的(比如告訴他們你可以通過關鍵詞或者特定項目或者......等進行搜索)。對於其他頁面和這些頁面上的內容,它就是這樣。

集思廣益

好了,所以就是我心目中,到目前爲止,這我不知道的(因此這就是爲什麼我張貼的問題)如下:

  1. 在數據庫中,創建兩個表格:PageFAQ和ElementFAQ,其中ElementFAQ是PageFAQ的子項。我之所以想到這個,是因爲我會將PageFAQ和所有ElementFAQ一起加載並將它們轉儲到頁面中並隱藏它們。
  2. 此時,我只會顯示PageFAQ的摘要文本,它會告訴用戶更多關於該頁面和一些可用選項的信息。
  3. 現在,爲了加載正確的ElementFAQ,應採取在服務器和客戶端的一些步驟:
    • 充分利用ElementFAQ的數據庫的確認ID用/名稱匹配那些被傾倒的隱藏的div (當頁面的PageFAQ被加載時)
    • 當用戶滾動一個元素(比如搜索欄)時,我會使用jQuery搜索id爲faq_searchBar的div並在其中顯示它的innerHTML常見問題方框。

問題

所有上述所說的理論上應該工作。但我無法理解如何在我正在查看的「頁面」與數據庫中的PageFAQ條目之間進行映射。如你所知,ASP.NET MVC中沒有真正的頁面,只有路由。那麼有什麼方法可以使用路線數據來獲取所需的PageFAQ?或者我應該使用查詢字符串?或者還有更好的方法來完成這一切,最好是不首先使用魔術字符串的東西。

UPDATE:

難道是太多的開銷加載PageFAQ及其所有ElementFAQ孩子將它們放到網頁作爲隱藏層?或者,當用戶滾動元素時,通過AJAX加載它們會更好嗎?

您的建議非常受歡迎。

回答

1

「頁」目前,我正在觀看

string currentAction = RouteData.GetRequiredString("action"); 
string currentController = RouteData.GetRequiredString("controller"); 
string id = CalculateId(currentAction, currentController); 
PageFAQ pageFAQ = Repository.GetFAQ(id); 
... 

的CalculateId可以簡單地電流控制器和行動,以相應的ID在數據庫或關聯直接添加這些列在您的數據庫,然後查詢:

string currentAction = RouteData.GetRequiredString("action"); 
string currentController = RouteData.GetRequiredString("controller"); 
PageFAQ pageFAQ = Repository.GetFAQ(currentAction, currentController); 
+0

這絕對有幫助。謝謝。所以我認爲我的方法應該工作?我要在上面更新我的問題,所以請回復更新以及如果您不介意... – Kassem 2011-03-26 14:32:08

+0

@Kassem,是的,您的方法將工作。就您的更新而言,您必須對其進行測量。 AJAX選項的優點在於,只有在用戶要求提供這些信息時纔會懶惰地完成,而如果您永久加載常見問題解答,那麼如果用戶永遠不會看到它,可能會有點浪費。 – 2011-03-26 14:32:53

+0

這應該在哪裏?我的服務層是一個代碼庫,所以它不知道有關RouteData的任何信息。所以我認爲這應該是在一個動作方法(比如在ApplicationController或類似的東西上),並且會被Ajax請求調用?或者,也許應該從視圖中調用@ Html.Action()調用?還有其他建議嗎? – Kassem 2011-03-26 16:19:56

相關問題