繁体   English   中英

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

[英]Simple best practices for ASP.NET models

我希望我的视图如下:

@model MyProgram.Models.DocumentList

@{
    ViewBag.Title = "View1";
}

@foreach (MyProgram.Models.Document doc in Model.GetDocs())
{
    <p>doc.Content</p>
}

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

/Model/DocumentList.cs
/Model/Document.cs

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

使用View Models ,您可以根据需要将尽可能多的模型传递给视图。 我还使用视图模型来处理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; }
}

你的观点

@model MyViewModel

@{
    ViewBag.Title = Model.PageTitle;
}

@foreach (var doc in Model.DocList)
{
    <p>doc.Content</p>
}

MVC还有很多,比如显示和编辑模板,所以我在网上看一些涵盖MVC要点的好教程。

编辑

公平地说,回过头来看,你已经有点遵循这个原则,只是DocumentList是你的视图模型(并且你真的不需要GetDocs方法,只需要一个集合属性,除非你正在执行逻辑返回之前的集合是)。

希望这个答案有助于为您澄清一些事情吗?

这取决于您的需求。 如果您只需要查看文档模型列表,我只会使用Document模型并将传递的视图模型更改为:

@model List<MyProgram.Models.Document>

@{
    ViewBag.Title = "View1";
}

@foreach (MyProgram.Models.Document doc in Model)
{
    <p>doc.Content</p>
}

但是,如果您在视图中需要更多属性或方法,那么我将使用包含List<MyProgram.Models.Document>的视图模型和其他属性。

@model DocumentsViewModel

@{
    ViewBag.Title = "View1";
}

@foreach (MyProgram.Models.Document doc in Model.DocumentList)
{
    <p>doc.Content</p>
}

模型:

public class DocumentsViewModel
{
    public List<MyProgram.Models.Document> DocumentList {get; set;}

    ... other properties
}

假设您需要2个模型类,这是正确的。
我会使用List属性,所以你的代码看起来像:

@foreach (var doc in Model.Docs)

另外:标准mvc为每个控制器创建一个模型文件夹。
因此,默认情况下,mvc项目看起来像

root
  Controllers
    YourFirstController
  Views
    YourFirst
      Index
  Models
    YourFirst
      DocumentList
      Document

*更新:如果您只想要一个项目列表,您也可以将List传递给您的模型,如下所示:

@model List<MyProgram.Models.Document>

@{
    ViewBag.Title = "View1";
}

@foreach (var doc in Model)
{
    <p>doc.Content</p>
}

在这种情况下采用了逻辑概念。 这叫做ViewModel。 视图模型类可以包含多个模型对象和其他属性,具体取决于视图。 ViewModel应该包含View所需的所有数据。 因此,在您的情况下,创建一个名为DocumentViewModel的ViewModel并创建另外两个模型的对象。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM