在某种情况下,我应该从一个视图填充模型数据吗?asp.net MVC

本文关键字:数据 模型 填充 视图 MVC net asp 一个 情况下 我应该 | 更新日期: 2023-09-27 18:28:35

View中的代码,

@{
    var MyModel = Entity.Employees.Select(t=> 
       new {t.FullName, t.Department.DepartmentName}));
}
@foreach (var e  in MyModel ) {
     <div> Name: @e.FullName  - @e.DepartmentName </div>
}

控制器为空

public ActionResult Index()
{
  return View();
}

我是Asp.net MVC的新手。这是我从书中学到的东西。

  1. 控制器检索模型数据,将其传递给视图
  2. 视图消耗模型数据
  3. 尽可能使用强类型模型

在控制器中,当模型数据来自EF/LinQ查询时,类型通常是匿名的,在传递到视图时不是强类型的。另一方面,我希望避免生成一次性使用的强类型模型。

上面的代码从View中检索模型数据,它是匿名的,但是强类型的。看来我可以从双方都得到好处。

我的问题是:我应该从视图填充模型数据吗?如果没有,为什么

我发现这很有帮助:它在控制器和视图之间传递动态数据,它很流畅,但不是强类型

在某种情况下,我应该从一个视图填充模型数据吗?asp.net MVC

不,你不应该。

你可以在网上阅读任何一篇文章,告诉你为什么MVC是一个好模式。您会发现您有更多的机会进行代码重用、单元可测试性等。

如果您没有使用控制器将视图模型传递给视图,那么您就没有真正遵循MVC。你还不如使用Razor网页。

想想瘦控制器胖模型哑视图

视图应包含尽可能少的逻辑。由于视图模型是专门为视图创建的,因此视图的唯一职责是使用在控制器中创建的视图模型的数据来呈现自己。如果你的视图中有很多决策、转换或其他逻辑,那么你并没有正确地使用MVC模式。

至于你的问题:在控制器中创建你的模型,而不是在视图中。

感谢所有的好答案,他们是对的。

但我最近的经验倾向于说仅在特定情况下

我的项目有许多网格页面。唯一的目的是显示一些网格数据。通常是

  1. 未在其他地方重复使用
  2. 不需要单元测试
  3. 经常被要求添加/删除/更改列

单元测试——网格数据直接来自实体框架,基本上是SQL查询,不需要对SQL查询进行单元测试。(存储过程可能需要)。

更改处理——更改实体查询、绑定到列、右键单击cshtml文件需要几分钟的时间;发布到生产中,所有内容都在一个文件中。Asp.net将对其进行动态编译。

性能--该项目是一个业务线应用程序。应用程序性能一直不是问题,尽管程序员的生产力很重要,但这种方法不会丢失任何强类型检查、自动完成等。