2012-03-03 104 views
1

即時通訊開始MVC &想你關於倉庫&查看模型的建議,特別是幾臺庫數據組合成一個VM。合併視圖模型

如果我有需要自己的存儲庫(對不起,本作的基本性質)三個不同的部分(列)網頁:

UserInfoData - 顯示在左山坳

DiaryData - 所示山坳中間

CommentData - 在右側山坳所示

Im做以下幾點: -

public ActionResult Index(int id) 
{ 
    UserInfoData uid = repository.GetUserInfoData(id); 
    UserInfoDataVM UserViewModel = Mapper.Map<UserInfoData, UserInfoDataVM>(uid); 

    //RETRIEVE DiaryData & CommentData using same principle as above 

    return ?? 
} 

我將如何結合這三個虛擬機的到的東西我能回到觀點 - 我用另一個虛擬機,它接受這三個虛擬機的?

是否有與具有自己的數據網頁的小部分打交道時,最好的做法?

回答

3

在我看來,這取決於你的使用場景。

你可以創建一個包含三個子視圖模型視圖模型,但你需要問自己,我該怎麼使用任何三個子視圖模型其他地方的?如果不是,那麼你可以使用一個大視圖模型。否則,封裝較小視圖模型的'包裝器'視圖模型沒有任何問題。

你可以保留你在上面定義的三個視圖模型,你可以使用Html.RenderAction語法在視圖中居然去打每個頁面的子部分。您將在控制器上定義一個操作,其責任是填充每個小視圖模型並返回該模型的視圖。

<div id="leftCol"> 
    @{Html.RenderAction("LeftCol", "Controller");} 
</div> 
<div id="midCol"> 
    @{Html.RenderAction("MiddleCol", "Controller");} 
</div> 
<div id="rightCol"> 
    @{Html.RenderAction("RightCol", "Controller");} 
</div> 

這將使您能夠在網站上的任何位置使用子部件,並且只需定義一次操作方法和部分視圖。

第二個選擇也是個人最喜歡的,因爲你可以迅速利用JQuery的做局部頁面加載,如果這些部分需要幾秒鐘來填充和渲染(如果這是有道理的,你的頁面)。現在,您的頁面可以快速打開,您可以使用JS函數獲取這些部分,並在其上放置一些加載圖形,並使用AJAX請求加載/渲染。再說一次,只有這對您有意義,但使用部分視圖/渲染操作方法通常會爲您在網站和AJAX局部頁面渲染上重複使用提供更大的靈活性。

+0

感謝湯米,也有很大幫助,Html.RenderAction看起來很有希望與jQuery的看起來也不錯,我去有一個思考在設計網站,並與這兩種技術很好的發揮。 – LenPopLilly 2012-03-03 17:45:30