2012-03-05 60 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