2012-01-15 104 views
0

我有這個菜單,我想讓我的佈局(基本上是我網站上的所有視圖)都可用。我希望在頁面請求中維護菜單的狀態(是否打開或關閉樹項目)。我想要做的是可能有一個從我的佈局頁面調用的子動作,它捕獲包含樹狀態信息的一些cookie或會話信息,以便我可以重新構建樹,確切地說它是最後一次請求的方式。我的問題是,從我讀的內容來看,從控制器的動作中調用諸如Session和Cookie之類的東西是不好的做法。我想知道的是解決這個問題的更優雅的方式。如果我必須使用Cookie和Session,任何人都有如何嘲笑他們的想法?謝謝在視圖中保留菜單樹狀態 - ASP.NET MVC 3

回答

0

我們可以將菜單作爲部分視圖。

渲染局部視圖的操作將接受渲染狀態的參數。每個鏈接將使用不同的參數調用該操作。

例如,

public PartialViewResult RenderNavigation(int Menuroot, int subMenuItem) 
{ 
IList<MyNavigationItem> navigationItems=GetNavigation();// Some method that'll read nvigationitems. 
navigationItems.Where(n=> n.menuId.Equals(Menuroot) ||n.IsOpen.Equals(subMenuItem)).ToList().ForEach(i=> i.IsOpen=true); 

return View("SomeMenuView",navigationItems); 
} 

public class MyNavigationItem{ 
int menuId{get;set;} 
bool IsOpen{get;set;} 
int parentMenuId{get;set;} // set default -1 for Root Items 
} 
+0

感謝您的迴應!那麼,如何堅持從請求到請求的菜單呢? – enamrik 2012-01-15 07:56:11

+0

不要通過請求去請求。最好把它看成是一頁一頁的。對於每個頁面菜單是不同的。可以在不同參數的每個頁面中調用部分視圖。 – Manas 2012-01-15 17:35:12

+0

所以參數會來自哪裏?請求參數?會議? – enamrik 2012-01-15 17:40:23

1

我的問題是,從我讀,這是不好的做法,那些控制器動作

有趣內調用之類的東西 會話和餅乾從。這篇文章的作者是否解釋了爲什麼這是一種不好的做法?從控制器操作訪問會話和cookie沒有任何問題。實際上,使用會話來處理這種事情可能並不合適,因爲如果用戶關閉瀏覽器,您將無法堅持樹的佈局,而使用持久cookie將是可能的。

+0

謝謝。我記得原因是單元測試。按照相同的方式排序,最好在控制器操作中使用模型綁定,而不是直接訪問FormsCollection。問題是我在佈局上使用了一個子動作,所以我不確定modelbinding是否是一個選項。 – enamrik 2012-01-15 17:12:07