簡體   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