2012-03-05 53 views
1

我來解釋我的觀點: 最好的做法是創建視圖與模型強類型。你只能大膽地輸入一個模型。在一個大而複雜的ASP.NET MVC應用程序中,創建了所有其他模型類的模型?

如果您需要兩個模型在一個視圖中,可以創建兩個視圖,並使用部分渲染,但它似乎不是最好的選擇。

另一種方法是創建一個封裝了其他的作品,你需要什麼型號的另一種類型的模型;這對我來說更有意義。

然後,我的問題是,在複雜的proyect當一個頁面需要的所有車型進行溝通,他們不是直接realted,開發人員創建封裝了所有其他的東西類型?

+0

我昨天剛回答過類似的問題,請查看這個問題,看看它是否有助於您的實例。 http://stackoverflow.com/questions/9547810/merge-viewmodel/9547903#9547903。當我從這個答案開始時,這一切都取決於你的使用場景。 – Tommy 2012-03-05 02:55:25

回答

4

對於您的觀點不相關的部分,你可以使用Html.Action()調用返回的局部視圖的操作。 這樣,「區域」的邏輯將被封裝在自己的動作和/或控制器中。

更新:我不知道這是否是真正的最佳實踐,但我更喜歡在成分複雜視圖&視圖模型。即使對於相關信息,我也傾向於將其分解爲較小的部分視圖和子操作。在我看來,它具有以下靈活性:

  1. 能夠方便地一些局部視圖/兒童行動的移動到頁面佈局
  2. 加載通過AJAX查詢
  3. 減少控制器動作異步的局部視圖複雜性和可維護性增加。對於條件渲染
  4. 分離的擔憂
  5. 更好的支持

(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返回的局部視圖放在左側窗格中。 當然,如果這種行爲在很多頁面上是通用的,你可以將這個邏輯轉換成佈局。

希望有所幫助。

+0

想象一下,你正在做一個小推特。你有一個推特模型類和一個用戶模型類。在視圖中想要顯示您的所有推文和所有用戶。 ¿在這種情況下最佳做法是什麼? – 2012-03-05 00:58:57

+1

+1,另外,我認爲你可以在這個答案中增加一些更多的描述,如下所示:http://stackoverflow.com/questions/9547810/merge-viewmodel/9547903#9547903 as this是一個很好的描述 – 2012-03-05 08:04:14

+0

謝謝。我已經更新了答案。 – 2012-03-05 13:48:23

1

然後,我的問題是,在複雜的proyect當一個頁面需要 與所有型號溝通,他們不是直接realted, 開發人員創建封裝了所有其他的東西類型?

是他們中的一些,對於這些名稱是ViewModels

相關問題