gpt4 book ai didi

asp.net-mvc - 什么是在 ASP.NET MVC 3 中使用逻辑构建 subview 的好方法

转载 作者:行者123 更新时间:2023-12-04 23:29:14 25 4
gpt4 key购买 nike

我们正在使用 Microsoft ASP.NET MVC 3 构建业务应用程序。
一些 View 现在变得如此复杂,以至于将它们分成两个或多个单独的 View 似乎是合理的,具有单独的 Controller 和模型。 (重用是想要构建单独 View 的另一个原因。)

您推荐哪种方法在 ASP.NET MVC 中实现这种分离?
部分 View 似乎是显而易见的答案,但正如我所见,“开箱即用”的部分 View 几乎不支持单独的 Controller 。

到目前为止,我们发现的最佳解决方案是Html.RenderAction("<view initialization action method>")此处解释的方法:http://www.primaryobjects.com/CMS/Article129.aspx

这篇文章还提到了 RenderAction 方法:ASP .NET MVC correct UserControl architecture

您认为这种方法有什么缺点吗?
您是否推荐任何更好、更简单的方法来实现这一目标?

最佳答案

采取“发布详细信息” View 。显示“帖子摘要”和“帖子评论”的复合 View 。

采用部分方法,您最终会得到:

public class PostDetailModel
{
PostSummaryModel Summary { get;set; }
PostCommentsModel Comments { get;set; }
}

并查看:
<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>

这意味着 PostController.Detail 方法将负责构造 PostSummaryModel、构造 PostCommentsModel 并选择使用哪些部分来呈现每个部分。

如果您还拥有以下模型:
public class PostListModel
{
ICollection<PostSummaryModel> Posts { get;set; }
}

您将有两个 Action 负责构建 PostSummaryModel 并知道要使用哪个部分。如果您的应用程序结构不正确,这可能会导致重复的数据访问/模型映射代码。但是,如果您将模型构造委托(delegate)和抽象到可重用的模型工厂(这两个操作都可以调用),您可以最大限度地减少这种风险。

另一方面,采用 Html.Action 方法,您的模型就变成了:
public class PostDetailModel
{
int PostId { get;set; }
}

并查看:
<div id="post_detail">
@Html.Action("Summary", new { Model.PostId })

@Html.Action("Comments", new { Model.PostId })
</div>

然后可以留下“摘要”和“评论”操作来构建自己的模型并选择 View 。

然而,选择 Html.Action 方法对性能的影响很小,因为 ASP.NET MVC 必须经历模型绑定(bind)、执行 Action 过滤器、验证等的整个过程,所以你可能不会使用 Html.Action在足够长的 ListView 中显示项目。但是对于创建复合 View 来说,将六个左右的现有 View 拼接在一起可能是一种非常干净的方法。

关于asp.net-mvc - 什么是在 ASP.NET MVC 3 中使用逻辑构建 subview 的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com