我來解釋我的觀點: 最好的做法是創建視圖與模型強類型。你只能大膽地輸入一個模型。在一個大而複雜的ASP.NET MVC應用程序中,創建了所有其他模型類的模型?
如果您需要兩個模型在一個視圖中,可以創建兩個視圖,並使用部分渲染,但它似乎不是最好的選擇。
另一種方法是創建一個封裝了其他的作品,你需要什麼型號的另一種類型的模型;這對我來說更有意義。
然後,我的問題是,在複雜的proyect當一個頁面需要的所有車型進行溝通,他們不是直接realted,開發人員創建封裝了所有其他的東西類型?
我來解釋我的觀點: 最好的做法是創建視圖與模型強類型。你只能大膽地輸入一個模型。在一個大而複雜的ASP.NET MVC應用程序中,創建了所有其他模型類的模型?
如果您需要兩個模型在一個視圖中,可以創建兩個視圖,並使用部分渲染,但它似乎不是最好的選擇。
另一種方法是創建一個封裝了其他的作品,你需要什麼型號的另一種類型的模型;這對我來說更有意義。
然後,我的問題是,在複雜的proyect當一個頁面需要的所有車型進行溝通,他們不是直接realted,開發人員創建封裝了所有其他的東西類型?
對於您的觀點不相關的部分,你可以使用Html.Action()調用返回的局部視圖的操作。 這樣,「區域」的邏輯將被封裝在自己的動作和/或控制器中。
更新:我不知道這是否是真正的最佳實踐,但我更喜歡在成分複雜視圖&視圖模型。即使對於相關信息,我也傾向於將其分解爲較小的部分視圖和子操作。在我看來,它具有以下靈活性:
(4)我的意思是,你可以很容易做到以下沒有您的視圖模型複雜:
<div class="header">
@if (loggedInUser.ShowAds) {
@Html.Action("Header", "Ads")
}
</div>
回答的問題你的評論。 考慮推特。在左側有內容窗格和用戶框。 因此,這裏是我們的TweetsController:
public class TweetsController: Controller {
public ActionResult Index() {
var tweets = ...;
return View(tweets);
}
}
鳴叫/索引視圖可能看起來像:
@model Tweet[]
<div class="leftPane">
@Html.Action("Index", "Users");
</div>
<div class="mainContent">
@foreach var t in Model {
@t.User - @t.Text
}
</div>
注意,左窗格中只是調用UsersController Index操作來顯示用戶清單。 這是它可能看起來像:
public class UsersController: Controller {
public ActionResult Index() {
var users = ...;
return PartialView(users);
}
}
而這裏的局部視圖(用戶/指數):
@model User[]
@foreach var u in Model {
<img src="@u.IconUrl"/> @u.Name
}
那麼將實際發生的,當推文圖將呈現Html.Action會將UsersController.Index返回的局部視圖放在左側窗格中。 當然,如果這種行爲在很多頁面上是通用的,你可以將這個邏輯轉換成佈局。
希望有所幫助。
想象一下,你正在做一個小推特。你有一個推特模型類和一個用戶模型類。在視圖中想要顯示您的所有推文和所有用戶。 ¿在這種情況下最佳做法是什麼? – 2012-03-05 00:58:57
+1,另外,我認爲你可以在這個答案中增加一些更多的描述,如下所示:http://stackoverflow.com/questions/9547810/merge-viewmodel/9547903#9547903 as this是一個很好的描述 – 2012-03-05 08:04:14
謝謝。我已經更新了答案。 – 2012-03-05 13:48:23
然後,我的問題是,在複雜的proyect當一個頁面需要 與所有型號溝通,他們不是直接realted, 開發人員創建封裝了所有其他的東西類型?
是他們中的一些,對於這些名稱是ViewModels
我昨天剛回答過類似的問題,請查看這個問題,看看它是否有助於您的實例。 http://stackoverflow.com/questions/9547810/merge-viewmodel/9547903#9547903。當我從這個答案開始時,這一切都取決於你的使用場景。 – Tommy 2012-03-05 02:55:25