Yng*_*sen 4 asp.net-mvc user-controls partial-views asp.net-mvc-3
我们正在使用Microsoft ASP.NET MVC 3构建业务应用程序.一些视图现在变得如此复杂,以至于将它们分成两个或多个单独的视图,使用单独的控制器和模型似乎是合理的.(重用是想要构建单独视图的另一个原因.)
您建议使用哪种方法在ASP.NET MVC中实现此类分离?
部分视图似乎是明显的答案,但正如我所看到的,"开箱即用"的部分视图几乎不支持单独的控制器.
到目前为止,我们发现的最佳解决方案是使用
Html.RenderAction("<view initialization action method>")
此处所述的方法:http://www.primaryobjects.com/CMS/Article129.aspx
这篇文章还提到了RenderAction方法:ASP .NET MVC正确的UserControl架构
你觉得这种方法有什么缺点吗?
您是否建议更好,更简单的方法来实现这一目标?
进入"发布详细信息"视图.一个复合视图,显示"Post Summary"和"Post Comments".
采取部分方法,你最终得到:
public class PostDetailModel
{
PostSummaryModel Summary { get;set; }
PostCommentsModel Comments { get;set; }
}
Run Code Online (Sandbox Code Playgroud)
并查看:
<div id="post_detail">
@Html.Partial("Summary", Model.Summary)
<ul class="comment-list">
@foreach(var comment in Model.Comments)
{
<li>@Html.Partial("Comment", comment)</li>
}
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
这意味着PostController.Detail方法将负责构造PostSummaryModel,构造PostCommentsModel并选择用于呈现每个部分的部分.
如果您还有以下型号:
public class PostListModel
{
ICollection<PostSummaryModel> Posts { get;set; }
}
Run Code Online (Sandbox Code Playgroud)
您将有两个操作负责构建PostSummaryModel并知道要使用哪个部分.如果您的应用程序结构不正确,可能会导致重复的数据访问/模型映射代码.但是,如果将模型构建委托并抽象为可重用模型工厂(可以通过两种操作调用),则可以将此风险降至最低.
另一方面,采用Html.Action方法简化您的模型:
public class PostDetailModel
{
int PostId { get;set; }
}
Run Code Online (Sandbox Code Playgroud)
并查看:
<div id="post_detail">
@Html.Action("Summary", new { Model.PostId })
@Html.Action("Comments", new { Model.PostId })
</div>
Run Code Online (Sandbox Code Playgroud)
然后可以将其留下"摘要"和"注释"操作来构建自己的模型并选择视图.
然而,在选择Html.Action方法时会有如此轻微的性能影响,因为ASP.NET MVC必须经历模型绑定,执行动作过滤器,验证等的整个过程,因此您可能不会使用Html.Action在足够长的列表视图中显示项目.但是为了创建一个复合视图,它可以是一个非常干净的方式来拼接六个左右的现有视图.
| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |