在 RC1 中,用于创建视图的模板的行为发生了变化。
正如 Scott Gu 关于发布候选版本的帖子所解释的那样,默认情况下,新创建的 aspx 视图不再具有代码隐藏文件。
根据反馈,我们已将视图模板更改为默认没有代码隐藏文件。此更改有助于加强 MVC 应用程序中视图的用途(旨在纯粹用于渲染并且不包含任何非渲染相关代码),并且对于大多数人来说消除了项目中未使用的文件。
RC 版本现在添加了 C# 和 VB 语法支持,用于从使用泛型的基类继承视图模板。例如,下面我们将其与 Edit.aspx 视图模板一起使用——其“inherits”属性派生自 ViewPage 类型:
我真的很喜欢能够在代码隐藏中编写特定于视图的代码来输出视图 - 特别是如果我在页面的几个部分重复逻辑,我无法证明创建部分视图是合理的。
我的实际问题:斯科特默认说- 这意味着我可以改变这种行为,但我似乎看不到在哪里。是否可以?手动创建一个代码隐藏文件并改变周围的东西是一种痛苦。
这也会导致另一个问题:
- 如果我重构模型的名称,则视图中的指令不会更新。这不是世界末日,而是完全强类型化的一个明显优势。
附录:对于那些想知道为什么我想要代码隐藏的人,这里有一些可能的原因。这是我所想到的几乎所有内容的累积列表。不言而喻(应该如此),除了模型中已有的数据之外,您不得访问任何数据。LINQ 可以用于模型数据的简单操作,但 LINQ to SQL 则不行!MVC 适用于应该已经知道这一点的人——这就是我喜欢它的原因——由聪明的人为聪明的人制作。
- 数据绑定旧版 ASP.NET 控件 - 如果替代方案不可用或需要临时解决方案。
- 查看需要递归以创建某种嵌套或分层 HTML 的逻辑。
- 查看使用临时变量的逻辑。我拒绝在我的标签汤中定义局部变量!我至少希望它们作为视图类的属性。
- 仅特定于一个视图或模型且不属于 HtmlHelper 的逻辑。作为旁注,我认为 HtmlHelper 不应该知道任何“模型”类。
IEnumerable<Product>
如果它知道模型中定义的类(例如ProductModel
. - 当您键入时,HtmlHelper 方法最终会从您的所有视图中可见
Html+dot
,我真的想尽可能地最小化这个列表。 - 如果我想编写代码,使用
HtmlGenericControl
该命名空间中的其他类以面向对象的方式生成我的 HTML(或者我有执行我想要移植的现有代码)。 - 如果我打算将来使用不同的视图引擎怎么办。我可能希望将一些逻辑保留在标签汤之外,以便以后更容易重用。
- 如果我希望能够重命名我的模型类并让它自动重构我的视图,而无需转到 view.aspx 并更改类名,该怎么办?
- 如果我正在与一个我不信任的 HTML 设计师协调,他不会弄乱“标签汤”,并且想要在 .aspx.cs 文件中编写除非常基本的循环之外的任何内容。
我认为人们对“代码隐藏”有偏见,因为它传统上被解释为“事件处理代码”,而不是“视图部分类的另一半”。
视图的代码隐藏很好。
我并不反对它会使文件夹结构有些混乱,但这就是+
图标的用途。我只希望能够使用“添加视图”创建带有代码隐藏的视图。