2010-02-09 109 views
1

你將如何在ASP.NET MVC 2中創建動態佈局,管理員可以選擇小部件來顯示,排列它們,禁用,移動它們等。我的意思是靈活的佈局,可以通過管理面板進行更改,而無需觸摸代碼。在這裏我想到了在db中定義和存儲佈局小部件路徑。後來我可以將這些小部件與路由(在db中)關聯起來。對於每個請求(控制器,動作),我將使用關聯的小部件獲取佈局,並遞歸輸出它們。可能我可以使用RenderAction和PartialViews。ASP.NET MVC 2動態佈局

我的方向是否正確,還是應該關注其他一些技巧?

感謝, 的Jakub

+0

當你說靈活的佈局,你的意思是隻看和定位或添加和刪除內容? 在第一種情況下,您可以使用CSS/Js和路徑做些事情,否則您必須變得更聰明,管理員會做多少事?他們可以觸摸HTML的代碼(即你會讓他們訪問您的意見?) – roundcrisis 2010-02-09 18:39:55

回答

2

Rob Conery在他的Kona改寫中做了類似的事情。他能夠在頁面中創建區域,然後將窗口小部件關聯到這些區域。

有浮現在腦海兩種方法:

1)首先是加載所有的部件在控制器的行動和他們持有的內容。然後將小部件(模型中)的所有信息發送到您的視圖,並在那裏進行過濾。這保留了視圖和控制器之間的分離。你可能會想創建一個輔助方法:

在第一種方法
<% Html.RenderWidgets("Main", Model.Widgets) %> 

<% Html.RenderWidgets("SideBar", Model.Widgets) %> 

一個說明。您可能需要某種命名約定,以便您可以更輕鬆地找到其局部視圖。

2.)另一種方法是使用RenderAction並調用一個可以傳遞區域名稱的「RegionController」。傳遞區域名稱將觸發查詢屬於該特定區域的所有小部件。

<% Html.RenderAction<RegionController>(x=>x.Widgets("Main")) %> 

<% Html.RenderAction<RegionController>(x=>x.Widgets("SideBar")) %> 

我個人會做第一種方法,但我看不出有問題,不是從純粹主義者的呼喊其他的第二種方法。

+0

假設小工具是一個有序列表我認爲第一個例子是最簡單的。 – 2010-02-09 18:44:55

+0

是的小工具最有可能是一個IEnumerable 或ICollection 與小部件有一些可區分的屬性,像widget.Region ==「主」 – 2010-02-10 17:58:51

+0

謝謝哈立德!這是我的第一個想法。我想第一個解決方案應該更快,因爲每個小部件不必運行路由管道。 – Cosmo 2010-02-12 01:44:44

1

如果你想小部件的互動拖和下降,使用jQuery或ExtJS的。 ExtJS有一個完整的portal example

如果您不想使用JavaScript,您需要滾動一個自定義解決方案,其中定義了區域並填充動態加載的部分視圖。

+0

感謝戴夫,我不想使用JQuery。我會採取第二種解決方案。 – Cosmo 2010-02-12 01:41:33