c# - 部分 View 、用户控制或其他?

标签 c# asp.net-mvc-4 controls

多年来我一直在使用 C# 开发控制台、服务和 Windows 窗体应用程序,并且才刚刚开始涉足 Web 开发和 MVC,我希望有人能够为我指明正确的方向实现我想做的事。

我正在从事的项目涉及将内部遗留的基于 PHP 的时间表系统移植到 C# ASP MVC 4 应用程序。

该系统的主要目的是为用户提供一种根据项目预订工作时间的方式,行包含项目和任务,一周中的每一天都有一列,最后一列和最后一行有总计,像这样:

            mon   tue   wed   thu   fri   sat   sun   total

Project 1   0:00  1:00  0:00  2:00  0:00  0:00  0:00   3:00
Project 2   0:30  0:00  5:00  0:00  0:00  0:00  0:00   5:30
Project 3   0:00  0:00  0:00  4:00  5:00  0:00  0:00   9:00

Total       0:30  1:00  5:00  6:00  5:00  0:00  0:00  17:30

我相信编写好的、干净的、可读的代码,我想尽量减少添加到 View 中的代码量,所以我不想在单个 View 中开发出一堆可怕的嵌套循环。我想要做的是将每个组件分解成可管理的 block ,例如,我将整个 View 本身变成一个实体,然后为每个项目行使用另一个嵌套实体。

根据我所做的研究,它看起来像 MVC 4 View User ControlPartial View 可能是我正在寻找的,但我可以'找到对这些项目中每一项实际设计用途的良好描述。

理想情况下,我希望能够将一个或多个对象传递到控件/ View 中,以便其中的代码可以根据传入的对象构建输出。

实现此目标的最佳方法是什么?用户控制、局部 View 还是完全不同的东西?

最佳答案

据我所知,用户控件位于旧的 ASP.NET 网页中,而 MVC 中的等效项是部分 View 。

局部 View 是可以包含在常规 View 中的 View 。例如,如果您有一个站点将在几个不同的页面上显示评论。比如,用户可以在一个页面上查看自己的评论历史记录,也可以在网站的另一部分查看新闻或博客文章下的评论。您可以将评论设为部分 View ,然后将其包含在文章和用户评论历史记录中。然后,如果您需要对评论 View 进行更改,它将在这两个地方进行更新。

您还可以将模型传递到分部 View 中。例如,使用我上面提供的示例。假设我有一篇文章,上面附有一系列评论:

public class ArticleModel 
{
     public string Title { get; set; }
     public string Body { get; set; }
     public IEnumerable<CommentModel> Comments { get; set; }
}

public class CommentModel 
{
     public string Body { get; set; }
     public string UserName { get; set; }
}

现在使用局部 View 在文章下显示这些评论的一种方法是这样的:

@model Application.ArticleModel

<div>
    <h2>@Model.Title</h2>
    <article>@Model.Body</article>

    @foreach(var comment in Model.Comments) 
    {
        @Html.RenderPartial("_CommentPartial", comment)
    }
</div>

下面是局部 View 的样子:

@model Application.CommentModel
<div>
    <p>@Model.Body</p>
    <span>Written by @Model.UserName</span>
</div>

有了这个,文章 View 就干净多了,你也可以在其他地方使用分部 View 。另一种方法是将评论集合传递到局部 View 中,然后将 foreach 循环也放入其中。

网上有很多解释比较好,但我希望我能有点用。

关于c# - 部分 View 、用户控制或其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713939/

相关文章:

c# - WPF 窗口边框上的双击事件

jquery - 用户点击后如何渲染部分 View (使用 Razor )?

c# - 在表单中找到焦点控件(在 .netCF 中)

.net - ASP.Net MVC 4/5 - 在运行时刷新路由

c# - 如果数字不是 double 值,则无法显示最多两位小数值的 double 类型值

file - 自动工具和版本控制

asp.net - 如何在不使用数据库的情况下重新实例化动态 ASP.NET 用户控件?

c# - 谷歌认证过程

c# - 有一个不允许自定义文本的自动完成组合框

c# - 我应该创建 DTO 以从 put 方法中的对象中删除 id 吗?