ASP.NET模型的简单最佳实践

Joh*_*ith 7 c# asp.net-mvc asp.net-mvc-4

我希望我的视图如下:

@model MyProgram.Models.DocumentList

@{
    ViewBag.Title = "View1";
}

@foreach (MyProgram.Models.Document doc in Model.GetDocs())
{
    <p>doc.Content</p>
}
Run Code Online (Sandbox Code Playgroud)

这让我相信我需要一个包含另一个模型列表的模型.所以在一个只包含这个的项目中我会:

/Model/DocumentList.cs
/Model/Document.cs
Run Code Online (Sandbox Code Playgroud)

这是正确的还是有更好的方法?

Pau*_*ann 4

使用视图模型,您可以根据需要将尽可能多的模型传递到视图。我还使用视图模型来处理 POST 等的验证。因此,在您的情况下,您可以执行以下操作:

你的视图模型

public class MyViewModel
{
    public string PageTitle { get; set; }
    public DocumentList DocList { get; set; }
    // You could use your DocumentList object here, or if you
    // don't want to, just pass a List<T> of Document
    public List<Document> DocList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您的看法

@model MyViewModel

@{
    ViewBag.Title = Model.PageTitle;
}

@foreach (var doc in Model.DocList)
{
    <p>doc.Content</p>
}
Run Code Online (Sandbox Code Playgroud)

MVC 的功能远不止于此,例如显示和编辑器模板,因此我会在网上查找一些涵盖 MVC 要点的优秀教程。

编辑

公平地说,读完这篇文章后,您已经有点遵循这个原则了,这就是DocumentList您的视图模型(并且您并不真正需要GetDocs方法,只需拥有一个集合属性,除非您在集合上执行逻辑返回之前即是)。

希望这个答案可以帮助您澄清一些事情?