我想建立它有3個標籤(從而3的div)網頁: 標籤1 - 更新個人資料 選項卡2 - 退房令 選項卡3 - 更改登錄詳細信息MVC3 .NET多模型或單一的視圖模型
據我所知,有兩種方法可以實現,但希望知道最佳實踐。
首先將具有實現單獨的模型3個的局部視圖每個 其次將具有實現單個視圖模型
第一個選項3個的局部視圖,如果使用局部視圖會導致的誤差「期望模型A,但得到了模型B「 我相信你可以使用RenderAction來解決這個問題,但這是最佳實踐嗎?
意見表示歡迎。
感謝
我想建立它有3個標籤(從而3的div)網頁: 標籤1 - 更新個人資料 選項卡2 - 退房令 選項卡3 - 更改登錄詳細信息MVC3 .NET多模型或單一的視圖模型
據我所知,有兩種方法可以實現,但希望知道最佳實踐。
首先將具有實現單獨的模型3個的局部視圖每個 其次將具有實現單個視圖模型
第一個選項3個的局部視圖,如果使用局部視圖會導致的誤差「期望模型A,但得到了模型B「 我相信你可以使用RenderAction來解決這個問題,但這是最佳實踐嗎?
意見表示歡迎。
感謝
查看選項卡的名稱,「更新個人詳細信息」,「檢查順序」和「更改登錄詳細信息」 - 看起來這些選項相當不同,但用戶可以執行的相關選項。
對我來說,將這些分成三個不同的視圖是有意義的,這意味着您只爲可見選項卡呈現動作。這樣,如果用戶只想更新他們的詳細信息,服務器不會執行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的人來說,它仍然可以正常工作。
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()
塊。
感謝您的信息。主視圖的最後一件事我懷疑3個部分視圖是在渲染時加載的。有沒有辦法延遲加載部分視圖,直到用戶按下不啓用選項卡。我知道你可以使用Ajax.actionLink,但是如何加載initil頁面呢? – user1079925 2012-02-16 21:36:47
在下面做了一個快速的回答,以提供一些線索。小小的建議,跳回到你以前的一些問題,並標記一些答案,否則你可能會發現你的問題的答案一般很低;) – 2012-02-16 19:55:48