我已经在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
我相信编写好的,干净的,可读的代码,并且我希望最小化添加到视图中的代码量,因此我不想在单个视图中开发可怕的嵌套循环。我想要做的是将每个组件分解为可管理的块,例如,我将整个视图本身变为一个实体,然后为每个项目行使用另一个嵌套实体。
从我所做的研究来看,它看起来像MVC 4 View User Control
或Partial View
可能是我正在寻找的,但我无法找到对这些内容的良好描述物品实际上是为了做。
理想情况下,我希望能够将一个或多个对象传递到控件/视图中,以便其中的代码可以根据传入的对象构建输出。
实现这一目标的最佳方法是什么?用户控制,部分视图还是完全不同的东西?
答案 0 :(得分:1)
我可以告诉用户控件在旧的ASP.NET网页中,而MVC中的等价物是部分视图。
部分视图是可以包含在常规视图中的视图。例如,如果您有一个站点,它将在几个不同的页面上显示注释。比如说,用户可以在一个页面上查看自己的评论历史记录,用户还可以在网站的另一部分上查看新闻或博客文章下的评论。您可以将注释视为部分视图,然后将其包含在文章和用户评论历史记录中。然后,如果您需要对评论视图进行更改,它将在两个位置进行更新。
您还可以将模型传递到部分视图中。例如,使用上面提供的示例i。假设我有一篇文章附有一系列评论:
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; }
}
现在,使用局部视图在文章下显示这些评论的一种方法是:
@model Application.ArticleModel
<div>
<h2>@Model.Title</h2>
<article>@Model.Body</article>
@foreach(var comment in Model.Comments)
{
@Html.RenderPartial("_CommentPartial", comment)
}
</div>
以下是部分视图的样子:
@model Application.CommentModel
<div>
<p>@Model.Body</p>
<span>Written by @Model.UserName</span>
</div>
通过这种方式,文章视图更加清晰,您也可以在其他地方使用局部视图。另一种方法是将注释集合传递给局部视图,然后将foreach循环也放入其中。
网上有很多解释方法更好,但我希望我能有所帮助。