如何在默认情况下创建RC1中的ASP.NET-MVC视图的"codebehind"文件

Sim*_*ver 5 .net asp.net-mvc code-behind

在RC1中,用于创建视图的模板的行为已更改.

正如Scott Gu关于候选版本的帖子所解释的那样,新创建的aspx视图不再具有默认的代码隐藏文件.

根据反馈,我们已将视图模板更改为默认情况下没有代码隐藏文件.此更改有助于强化MVC应用程序中的视图的目的(这些应用程序纯粹是关于呈现并且不包含任何非呈现相关代码),并且对于大多数人来说,消除了项目中未使用的文件.

RC构建现在添加了C#和VB语法支持,用于从使用泛型的基类继承视图模板.例如,下面我们使用Edit.aspx视图模板 - 其"inherits"属性派生自ViewPage类型:

我真的希望能够在代码隐藏中编写特定于视图的代码来输出视图 - 特别是如果我在页面的几个部分重复了逻辑,我无法证明创建局部视图.

我的实际问题:斯科特默认说- 这意味着我可以改变这种行为,但我似乎无法看到哪里.可能吗?手动创建代码隐藏文件并改变现状是一件痛苦的事.

这也会导致另外一个问题:

  • 如果我重构模型的名称,那么View中的指令不会更新.这不是世界末日,而是完全强烈打字的一个明显优势.

附录:对于那些想知道为什么我想要代码隐藏的人来说,这是一些可能的原因.这是我所想到的几乎所有内容的累积列表.不言而喻(除此之外)您不得访问除模型中已有数据之外的任何数据.LINQ可以很好地处理模型数据,但LINQ to SQL不会!MVC适合那些应该已经知道这一点的人 - 这就是我喜欢它的原因 - 聪明人为智能人士制作.

  • 数据绑定旧版ASP.NET控件 - 如果替代方案不可用或者需要临时解决方案.
  • 查看需要递归以创建某种嵌套或分层HTML的逻辑.
  • 查看使用临时变量的逻辑.我拒绝在我的标签汤中定义局部变量!我希望它们至少在视图类上作为属性.
  • 仅针对一个视图或模型且不属于HtmlHelper的逻辑.作为旁注,我不认为HtmlHelper应该知道任何"模型"类.如果它知道模型中定义的类(例如IEnumerable<Product>,但我不认为你应该有一个HtmlHelper需要一个ProductModel.
  • 当你输入时,HtmlHelper方法最终会从你的所有视图中看到Html+dot,我真的想尽可能地减少这个列表.
  • 如果我想编写使用HtmlGenericControl该命名空间中的其他类的代码以面向对象的方式生成我的HTML(或者我有现有的代码来执行我想要移植的代码),该怎么办?
  • 如果我计划将来使用不同的视图引擎怎么办?我可能希望将一些逻辑与标签汤放在一起,以便以后更容易重用.
  • 如果我希望能够重命名我的Model类并让它自动重构我的视图而不必转到view.aspx并更改类名,该怎么办?
  • 如果我正在与一个我不信任的HTML设计师进行协调,以免弄乱"标签汤",并希望在.aspx.cs文件中编写非常基本的循环,那该怎么办?

我认为人们对"代码隐藏"有偏见,因为它传统上被解释为"事件处理代码"而不是"视图的另一半部分类",这就是它的本质.

视图的代码隐藏就好了.

我并不反对它使文件夹结构稍微混乱,但这就是+图标的用途.我只是希望能够使用"添加视图"创建具有代码隐藏的视图.

And*_*rse 2

为了直接回答您的问题,我认为您无法更改此默认值。您可以尝试修改模板(位于 %programfiles%\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates" 中的某个位置),但我不确定。

然而,这种情况的“MVC 方式”可能是在单独的类中创建一个自定义助手。

我最近编写了一个 Web 应用程序,它使用 Gravatar ( http://www.gravatar.com ) 生成个人资料图片,并且我一直在我的视图中编写相同的自定义 <img> 标签,因此我创建了一个助手: Html.Gravatar( )

只需创建一个静态类“MyHelpers”或“GravatarHelpers”或“FooHelpers”并添加具有如下签名的静态扩展方法:

public static string Gravatar(this HtmlHelper htmlHelper, string emailAddress) {
    return htmlHelper.Image(...);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用强类型视图 (ViewPage<T>) 并希望利用它,您可以扩展 HtmlHelper<T>

public static string Foo<TModel>(this HtmlHelper<TModel> htmlHelper, ...) {
    // Do stuff
    return // Stuff
}
Run Code Online (Sandbox Code Playgroud)

您可以轻松地将 HtmlHelper 切换为 UrlHelper 或 AjaxHelper。我相信您还可以从助手上的 ViewContext 属性访问 ViewData 等。