2009-11-09 19 views
0

我目前正在考慮在asp.net mvc中構建一個相對複雜的頁面的最佳方法。頁面(以及類似頁面)將包含許多「控件」,例如購物籃,最近的新聞窗口小部件,登錄控件等。換句話說,它將是非常基於組件的。在asp.net中構建一個複雜的頁面MVC

我的問題是,在asp.net MVC中構建類似這樣的最佳方式是什麼?在常規的webforms中,答案會很簡單,這要歸功於用戶控件以及它們可以很好地自包含的事實。在MVC中,我理解理論上我應該可以構建一個視圖模型,其中包含所有小部件所需的所有數據,然後在我構建的任何頁面中渲染部分視圖。 可以通過簡單地調用控制器來渲染部分視圖來使用JavaScript來「動態」加載小部件(想一想jQuery加載)。這樣我就可以擁有一個籃筐控制器,當被叫出籃筐時。當然,這依賴於javascript ....

這種情況的最佳做法是什麼?

感謝

回答

0

您可以嘗試從MvcContrib或史蒂夫桑德森的"Partial Request"方法的子控制器。

但我警告你 - (部分請求之間的溝通,我沒有嘗試過子控制器)他們可能會變得棘手,並導致巨大的失敗。只有在你完全確定他們是完全獨立的時候才使用它們。

反正 - 這是一個壞主意,應通過控制器/視圖模型繼承什麼的....避免

+0

我認爲,後由史蒂芬·桑德森幾乎清除的問題,爲我。他的解決方案似乎很整潔。我想知道MS是否會在asp.net mvc future以外包含這種功能的官方機制 – Sergio

+0

如果MS會包含任何內容,可能不會有任何想法 - 可能不會,因爲它與MVC模式有點矛盾。相信我 - 這個解決方案很棘手。這些'小部件'之間的溝通會殺死你。 :) –

1

當然,你可以使用JavaScript來填充頁面部分,但那麼這些內容將無法訪問搜索引擎(但可能不關你的事)。

你需要了解的是,目前沒有辦法讓這些局部視圖獨立執行。就像與自己的控制器交談併發布數據,同時保持其餘的時間不變(就像使用WebForms和用戶控件完成的那樣)。如果你認爲回發和控制狀態,這些東西不再存在。您的「控件」發佈帖子,控制器必須處理請求,然後重新創建完整視圖以及所有元素值,狀態和其他「用戶控件」。

除非你使用JavaScript進行異步處理。但是,它不會再成爲一個可訪問的頁面。

0

我的MVC的理解還不了的WebForms,不過是像這樣的東西普遍接受的方法簡單地將這些東西放在ViewBag中而不是將它們包含在ViewModel中?

0

你可以通過一些簡單的檢查發送一個主視圖模型。然後根據需要呈現相應的操作。然後每個部分可以使用它自己的viewmodel,並且您不需要在相同的viewmodel上最初發送所有內容。

剃刀:

@if (model.ShowShoppingCart) 
{ 
    @Html.Action("Index","ShoppingCart") 
} 
@if (model.blah) 
{ 
    @Html.Action("Index","blah") 
}