多年来我一直在使用 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 Control
或 Partial 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/