我来解释我的观点: 最好的做法是创建视图与模型强类型。你只能大胆地输入一个模型。在一个大而复杂的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