加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在ASP.NET MVC 3中用逻辑构建子视图的好方法是什

发布时间:2020-12-16 06:37:54 所属栏目:asp.Net 来源:网络整理
导读:我们正在使用Microsoft ASP.NET MVC 3构建业务应用程序. 一些观点现在变得如此复杂,以至于将它们划分为两个或更多个单独的视图似乎是合理的,具有单独的控制器和模型. (重用是想要构建单独视图的另一个原因.) 您建议使用哪种方法在ASP.NET MVC中实现此类分离
我们正在使用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 correct UserControl architecture

你觉得这种方法有什么缺点吗?
您是否建议更好,更简单的方法来实现这一目标?

解决方法

进入“发布详细信息”视图.一个复合视图,显示“Post Summary”和“Post Comments”.

采取部分方法,你最终得到:

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; }
}

您将有两个操作负责构建PostSummaryModel并知道要使用哪个部分.如果您的应用程序结构不正确,可能会导致重复的数据访问/模型映射代码.但是,如果将模型构建委托并抽象为可重用模型工厂(可以通过两种操作调用),则可以将此风险降至最低.

另一方面,采用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>

然后可以将其留下“摘要”和“注释”操作来构建自己的模型并选择视图.

然而,在选择Html.Action方法时会有如此轻微的性能影响,因为ASP.NET MVC必须经历模型绑定,执行动作过滤器,验证等的整个过程,因此您可能不会使用Html.Action在足够长的列表视图中显示项目.但是为了创建一个复合视图,它可以是一个非常干净的方式来拼接六个左右的现有视图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读