如何更新aspnet-scaffolding cshtml页面

时间:2014-09-03 21:47:16

标签: c# asp.net-mvc razor

我正在使用带有视图的MVC 5控制器,使用实体框架并自动创建,删除,详细信息,编辑,索引cshtml页面。当我更改模型类并更新数据库时,CSHTML页面不会更改。我手动删除视图页面并使用脚手架重新创建它们。当我做这些事情时,我的HTML设计被删除了。

如何自动更新aspnet-scaffolding cshtml页面?

注意:我正在使用布局页面,但他们没有解决我的问题。

1 个答案:

答案 0 :(得分:2)

“当我执行这些操作时,我的html设置将被删除。”

以下是问题的根源。如果我理解你正确的话:

  1. 使用scaffolding生成视图。
  2. 修改这些视图的CSHTML以自定义视图。
  3. 您的希望是在修改数据库之后,脚手架将更新视图。但是,当它生成新的CSHTML视图时,它如何知道如何将更改与您的自定义组合?它没有。 它无法知道如何生成全新视图并以某种方式集成您的自定义。

    这与涉及代码生成的任何场景几乎相同。你必须做出选择。如果要保留编辑,则无法再使用脚手架在编辑后生成新视图。如果您希望在数据库更新后从脚手架中受益,那么您不应该编辑CSHTML以便自定义它。

    我很久以前只使用脚手架作为学习工具,看看列表是如何处理的。大概两年我从来没有使用过脚手架,对于大型项目来说通常都很慢,所以我总是创建一个空的CSHTML或复制一个接近我将采用新方法的现有方法。

    我会专注于其他有助于创建CSHTML的技术。

    • 适当地使用部分视图来拉出可重用的UI元素。
    • 使用自定义对象模板自定义DisplayFor和EditorFor等内容的结果。(我个人不这样做,但我见过其他人有效地使用它)。
    • 实施帮助程序以接收参数并生成适合您遵循的模式的HTML。因为我使用bootstrap,所以我创建了自己的Html.LabelForBootstrap帮助器,它输出格式化的HTML格式,以便与bootstrap类一起使用。
    • 有效使用布局页面和部分。

    最终,您会开始看到脚手架在许多情况下都不合适。例如。用于将一个实体与另一个实体相关联的UI,即当许多列不适合显示时显示所有列的事实等。

    您可能对动态数据感兴趣。它更加面向传统,它从数据库结构中确定UI,但您提供自定义约定。总的来说,与使用自定义对象模板的MVC在概念上并没有什么不同: http://msdn.microsoft.com/en-us/library/vstudio/ee845452(v=vs.100).aspx

    动态数据不是主流,你从中学到的技能可能不是很有市场。它可能仅适用于用户体验不是主要关注点的管理界面。一旦你很好地学习了MVC,你就可以很快地为新实体吐出基本用户界面,所以我不建议使用动态数据。

    可以修改默认的脚手架模板。因此,如果您愿意,您可以自定义模板并让它生成您的视图。 您将很快遇到同样的问题但是,您将遇到通用模板不满足的情况,您需要自定义输出View CSHTML,但现在您无法再生成View因此脚手架模板的用途有限:
    http://www.hanselman.com/blog/ModifyingTheDefaultCodeGenerationscaffoldingTemplatesInASPNETMVC.aspx