2012-02-16 70 views
0

我想建立它有3個標籤(從而3的div)網頁: 標籤1 - 更新個人資料 選項卡2 - 退房令 選項卡3 - 更改登錄詳細信息MVC3 .NET多模型或單一的視圖模型

據我所知,有兩種方法可以實現,但希望知道最佳實踐。

首先將具有實現單獨的模型3個的局部視圖每個 其次將具有實現單個視圖模型

第一個選項3個的局部視圖,如果使用局部視圖會導致的誤差「期望模型A,但得到了模型B「 我相信你可以使用RenderAction來解決這個問題,但這是最佳實踐嗎?

意見表示歡迎。

感謝

+0

在下面做了一個快速的回答,以提供一些線索。小小的建議,跳回到你以前的一些問題,並標記一些答案,否則你可能會發現你的問題的答案一般很低;) – 2012-02-16 19:55:48

回答

0

查看選項卡的名稱,「更新個人詳細信息」,「檢查順序」和「更改登錄詳細信息」 - 看起來這些選項相當不同,但用戶可以執行的相關選項。

對我來說,將這些分成三個不同的視圖是有意義的,這意味着您只爲可見選項卡呈現動作。這樣,如果用戶只想更新他們的詳細信息,服務器不會執行DB查詢來檢查訂單

您可以使用一些css來設置它的樣式,使其看起來像三個標籤,但每個標籤真的會是一個鏈接,它做了一個新的請求,只是看起來有三個標籤。

例如

<div id="content"> 
    <ul> 
     <li class="active">Update Personal Details</li> 
     <li>@Html.ActionLink("Check Order","CheckOrder")</li> 
     <li>@Html.ActionLink("Update Logon Details","UpdateLogonDetails")</li> 
    </ul> 
    <div id="tab1" /> 
    ... Update Personal Details Tab... etc 
    </div> 
    ... tab2 and tab 3 not included... 
</div> 

CheckOrder和UpdateLogonDetails的操作會呈現基本相同的視圖,但會顯示不同的選項卡。

這會產生這樣的錯覺,即它們都是使用製表符運行的,即使它不是。

然後,當你運行所有內容時,可以使用JQuery更新這些鏈接,通過AJAX激發請求,將結果作爲部分視圖返回,並用結果更新內容div。這意味着啓用了Javascript的人可以獲得適當的'ajax'體驗,但對於那些禁用了javascript的人來說,它仍然可以正常工作。

0

user1079925,

正如你所說,有多種方法可以做到這一點,它都將取決於「相關」數據是如何。如果它全部來自相同的控制器,那麼使用單個視圖模型來封裝數據是有意義的。這裏有一個快速的塗鴉至於如何可能看:

public class SubViewModelA 
{ 
    public string SpecialProperty { get; set; } 
} 

public class SubViewModelB 
{ 
    public string SpecialProperty { get; set; } 
} 

public class SubViewModelC 
{ 
    public string SpecialProperty { get; set; } 
} 

public class TabbedViewModel 
{ 
    public SubViewModelA TabA {get; set; } 
    public SubViewModelB TabB {get; set; } 
    public SubViewModelC TabC {get; set; } 
} 

這將在視圖中引用爲:

@model TabbedViewModel 

<div id="taba">@Html.EditorFor(model => model.TabA.SpecialProperty)</div> 
<div id="tabb">@Html.EditorFor(model => model.TabB.SpecialProperty)</div> 
<div id="tabc">@Html.EditorFor(model => model.TabC.SpecialProperty)</div> 

現在,這是不漂亮(我會離開你的那部分),但會允許您從單個視圖模型中填充您的「標籤」。另一種方法是,如果數據完全不相關,則在tab div內部有3個@RenderAction()塊。

+0

感謝您的信息。主視圖的最後一件事我懷疑3個部分視圖是在渲染時加載的。有沒有辦法延遲加載部分視圖,直到用戶按下不啓用選項卡。我知道你可以使用Ajax.actionLink,但是如何加載initil頁面呢? – user1079925 2012-02-16 21:36:47