Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET模型的简单最佳实践_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

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

C# ASP.NET模型的简单最佳实践,c#,asp.net-mvc,asp.net-mvc-4,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> } 这是正确的还是有更好的方法?您假设需要两个模型类来实现这一点是正确的。 不过,我会使用List属性,这样您的代码看起来像: @for

我希望我的观点如下:

@model MyProgram.Models.DocumentList

@{
    ViewBag.Title = "View1";
}

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

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

您假设需要两个模型类来实现这一点是正确的。
不过,我会使用List属性,这样您的代码看起来像:

@foreach (var doc in Model.Docs)
此外: 标准mvc为每个控制器创建一个模型文件夹。
因此,默认情况下,mvc项目如下所示

*更新: 如果您只需要一个项目列表,还可以像这样将列表传递给您的模型:

@model List<MyProgram.Models.Document>

@{
    ViewBag.Title = "View1";
}

@foreach (var doc in Model)
{
    <p>doc.Content</p>
}
@型号列表
@{
ViewBag.Title=“View1”;
}
@foreach(模型中的var文档)
{
文件内容

}
使用这种方式,您可以根据需要向视图传递任意多个模型。我还使用视图模型来处理帖子的验证等。因此,在您的案例中,您可以执行以下操作:

您的视图模型

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; }
}
公共类MyViewModel
{
公共字符串PageTitle{get;set;}
公共文档列表DocList{get;set;}
//您可以在此处使用DocumentList对象,或者
//不想,只需传递一个文档列表
公共列表DocList{get;set;}
}
你的观点

@model MyViewModel

@{
    ViewBag.Title = Model.PageTitle;
}

@foreach (var doc in Model.DocList)
{
    <p>doc.Content</p>
}
@model MyViewModel
@{
ViewBag.Title=Model.PageTitle;
}
@foreach(Model.DocList中的var文档)
{
文件内容

}
不过,MVC的内容远不止这些,例如,我将在网上查找一些涵盖MVC基本要素的好教程

编辑

平心而论,读完这篇文章后,你已经有点遵循了这个原则,
DocumentList
是你的视图模型(你并不需要
GetDocs
方法,只要有一个集合属性,除非你在返回之前对集合执行逻辑)


希望这个答案能帮助你澄清一些事情。

在这种情况下,有一个合乎逻辑的概念。这称为ViewModel。视图模型类可以包含多个模型对象和其他特性,具体取决于视图。ViewModel应具有视图所需的所有数据。因此,在您的示例中,创建一个名为DocumentViewModel的ViewModel,并创建其他两个模型的对象


希望这有帮助。

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

@model List<MyProgram.Models.Document>

@{
    ViewBag.Title = "View1";
}

@foreach (MyProgram.Models.Document doc in Model)
{
    <p>doc.Content</p>
}
@型号列表
@{
ViewBag.Title=“View1”;
}
@foreach(模型中的MyProgram.Models.Document文档)
{
文件内容

}
但是如果您的视图中需要更多的属性或方法,我会选择包含
列表和其他属性的视图模型

@model DocumentsViewModel

@{
    ViewBag.Title = "View1";
}

@foreach (MyProgram.Models.Document doc in Model.DocumentList)
{
    <p>doc.Content</p>
}
@model DocumentsViewModel
@{
ViewBag.Title=“View1”;
}
@foreach(Model.DocumentList中的MyProgram.Models.Document文档)
{
文件内容

}
型号:

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

    ... other properties
}
公共类文档viewmodel
{
公共列表文档列表{get;set;}
……其他财产
}

Paul Aldred Bann给出了一个正确的例子。就我与MVC的关系而言,我指出的一件事是,不应该对您的模型进行任何类型的验证,如
[必需]
属性或影响任何属性。所有验证都应在ViewModel属性上进行,而不是在模型属性上进行。我相信所有的答案都是正确的。这是关于
简单的最佳实践
。这是一个真正的最佳实践。Chee的+1和OP练习比其他答案都好,这似乎就是我想要的。谢谢你的帮助。
@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
}