部分视图,用户控制还是其他什么?

时间:2014-07-12 14:32:29

标签: 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

我相信编写好的,干净的,可读的代码,并且我希望最小化添加到视图中的代码量,因此我不想在单个视图中开发可怕的嵌套循环。我想要做的是将每个组件分解为可管理的块,例如,我将整个视图本身变为一个实体,然后为每个项目行使用另一个嵌套实体。

从我所做的研究来看,它看起来像MVC 4 View User ControlPartial View可能是我正在寻找的,但我无法找到对这些内容的良好描述物品实际上是为了做。

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

实现这一目标的最佳方法是什么?用户控制,部分视图还是完全不同的东西?

1 个答案:

答案 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循环也放入其中。

网上有很多解释方法更好,但我希望我能有所帮助。