Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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# 如何从视图中的视图重新使用模型类型?_C#_Asp.net Mvc 3_Razor_Viewmodel - Fatal编程技术网

C# 如何从视图中的视图重新使用模型类型?

C# 如何从视图中的视图重新使用模型类型?,c#,asp.net-mvc-3,razor,viewmodel,C#,Asp.net Mvc 3,Razor,Viewmodel,如何重用声明的模型类型?在视图的顶部是声明 @model mySpace.viewModels.viewModel 我想做的是在后面的页面中,做一些类似 @for( viewModel vM in ViewBag.viewModels ) { //some foo bar } 如果您已经有了一个强类型视图,那么您真的不应该考虑ViewBag/ViewData。将强类型视图添加到视图模型后,在此视图中需要做的就是使用此视图模型的属性,如下所示: @foreach (viewModel vm

如何重用声明的模型类型?在视图的顶部是声明

@model mySpace.viewModels.viewModel
我想做的是在后面的页面中,做一些类似

@for( viewModel vM in ViewBag.viewModels )
{
 //some foo bar
}

如果您已经有了一个强类型视图,那么您真的不应该考虑ViewBag/ViewData。将强类型视图添加到视图模型后,在此视图中需要做的就是使用此视图模型的属性,如下所示:

@foreach (viewModel vm in Model.SomeSubModels)
{
    //some foo bar
}
或者更好,为了避免视图中可怕的
foreach
循环,可以使用编辑器模板(如果需要编辑某些属性):

或者使用显示样板(如果只希望向用户显示视图模型特性的值):

因此,在设计ASP.NET MVC应用程序时,这里有两条基本规则要遵循(按顺序):

  • 您忘记了ViewBag/ViewData。就好像他们不存在似的。你只是简单地把它们从存在中抹去。如果你忘记了他们,你会为自己做出真正的贡献
  • 您定义的视图模型是一个包含视图所需的所有属性的类
  • 让控制器操作查询存储库和域模型,并将结果映射到此视图模型,该视图模型将传递给视图
  • 在相应的视图中,您只需使用控制器操作提供的视图模型的属性来显示一些信息

  • 规则1。是真正的基础,也是最重要的。如果您不遵守此规则,那么您实际上没有正确地执行ASP.NET MVC。

    如果您已经有了强类型视图,那么您甚至不应该考虑ViewBag/ViewData。将强类型视图添加到视图模型后,在此视图中需要做的就是使用此视图模型的属性,如下所示:

    @foreach (viewModel vm in Model.SomeSubModels)
    {
        //some foo bar
    }
    
    或者更好,为了避免视图中可怕的
    foreach
    循环,可以使用编辑器模板(如果需要编辑某些属性):

    或者使用显示样板(如果只希望向用户显示视图模型特性的值):

    因此,在设计ASP.NET MVC应用程序时,这里有两条基本规则要遵循(按顺序):

  • 您忘记了ViewBag/ViewData。就好像他们不存在似的。你只是简单地把它们从存在中抹去。如果你忘记了他们,你会为自己做出真正的贡献
  • 您定义的视图模型是一个包含视图所需的所有属性的类
  • 让控制器操作查询存储库和域模型,并将结果映射到此视图模型,该视图模型将传递给视图
  • 在相应的视图中,您只需使用控制器操作提供的视图模型的属性来显示一些信息

  • 规则1。是真正的基础,也是最重要的。如果您不遵守此规则,那么您确实没有正确执行ASP.NET MVC。

    我有一个列出项目的视图,并且还允许创建项目。当用户希望创建项目时,我不想回发整个列表,这就是为什么在本例中,我选择不使用强类型视图模型,因为我不想为了添加一个项目而重新发布整个列表。@TravisJ,在ASP.NETMVC中,绝对不应该选择不使用强类型视图模型,而应该选择ViewBag/ViewCrap。视图模型是未来的发展方向。他们会解决你遇到的每一个问题。不要害怕向您的项目中添加新类。如果用
    [httppost]
    装饰的控制器接受viewmodel,并且viewmodel被传递到视图中,并带有完整的列表,那么该列表不会也被发布吗?我最关心的是发布的速度。@TravisJ,我完全不知道你在说什么。我有一个视图,可以列出项目,也可以创建项目。当用户希望创建项目时,我不想回发整个列表,这就是为什么在本例中,我选择不使用强类型视图模型,因为我不想为了添加一个项目而重新发布整个列表。@TravisJ,在ASP.NETMVC中,绝对不应该选择不使用强类型视图模型,而应该选择ViewBag/ViewCrap。视图模型是未来的发展方向。他们会解决你遇到的每一个问题。不要害怕向您的项目中添加新类。如果用
    [httppost]
    装饰的控制器接受viewmodel,并且viewmodel被传递到视图中并带有完整的列表,那么该列表是否也会被发布?我最关心的是发布的速度。@TravisJ,我完全不知道您在说什么。
    @Html.DisplayFor(x => x.SomeSubModels)