【问题标题】:Should I populate model data from a view in certain case - asp.net MVC在某些情况下我应该从视图中填充模型数据 - asp.net MVC
【发布时间】:2015-07-07 12:25:31
【问题描述】:

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 中检索模型数据,它是匿名但强类型的。看来我可以从双方得到好处。

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

我发现这很有帮助:it passes dynamic data between controller and view,它很流畅,但不是强类型

【问题讨论】:

  • 不,你不应该这样做

标签: c# asp.net-mvc anonymous-types


【解决方案1】:

不,你不应该。

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

如果您没有使用控制器将视图模型传递给视图,那么您并没有真正遵循 MVC。您也可以使用 Razor 网页。

【讨论】:

    【解决方案2】:

    想想 Skinny ControllersFat ModelsDumb Views

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

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

    【讨论】:

      【解决方案3】:

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

      但我最近的经验倾向于说是的...仅在某些情况下

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

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

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

      更改处理——实际上只需几分钟即可更改实体查询、绑定到列、右键单击 cshtml 文件并发布到生产环境,所有这些都在一个文件中。 Asp.net 将动态编译它。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-24
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        • 2012-04-10
        相关资源
        最近更新 更多