“当我做这些事情时,我的 html 设计被删除了。”
这是问题的根源。如果我理解正确,您是:
- 使用脚手架生成视图。
- 修改这些视图的 CSHTML 以自定义视图。
您希望在您修改数据库后,脚手架会更新视图。但是,当它生成新的 CSHTML 视图时,它如何知道如何将更改与您的自定义结合起来?它没有。 它不知道如何生成一个全新的视图并以某种方式集成您的自定义设置。
这与任何涉及代码生成的场景几乎相同。你必须做出选择。如果要保留编辑,则不能再使用脚手架在编辑后生成新视图。如果您想在数据库更新后从脚手架中受益,那么您永远不应编辑 CSHTML 以对其进行自定义。
很久以前,我只是将脚手架用作学习工具,以了解如何处理列表之类的事情。大概有 2 年我从来没有使用脚手架,而且对于大型项目来说它通常很慢,所以我总是创建一个空的 CSHTML 或复制一个与我将采用的新方法接近的现有 CSHTML。
我会转而关注其他有助于更轻松地创建 CSHTML 的技术。
- 适当地使用部分视图来提取可重用的 UI 元素。
- 使用自定义对象模板来自定义诸如 DisplayFor 和 EditorFor 之类的结果。(我个人不这样做,但我看到其他人有效地使用它)
- 实施了帮助程序以接收参数并生成符合您遵循的模式的 HTML。例如,由于我使用引导程序,因此我创建了自己的
Html.LabelForBootstrap 帮助程序,它输出格式化为与引导程序类一起使用的 HTML。
- 有效使用布局页面和部分。
最终您会开始发现,在许多情况下,脚手架根本不合适。例如。用于将一个实体与另一个实体关联的 UI,当许多列不适合显示时,它会显示所有列,等等。
您可能对动态数据感兴趣。它更加面向约定,因为它根据数据库结构确定 UI,但您提供自定义约定。总体而言,它在概念上与使用带有自定义对象模板的 MVC 并没有真正的不同:
http://msdn.microsoft.com/en-us/library/vstudio/ee845452(v=vs.100).aspx
动态数据不是主流,您从使用它中学到的技能可能不是很有市场价值。它可能只适用于用户体验不是主要关注点的管理界面。一旦你真正学会了 MVC,你可以很快为新实体吐出基本的 UI,所以我不推荐 Dynamic Data。
可以修改默认的脚手架模板。因此,如果您愿意,您可以自定义模板并让它生成您的视图。 你很快就会遇到同样的问题,但是你会遇到一个场景,你的通用模板不满足,你需要自定义输出视图 CSHTML,但现在你不能再重新生成视图所以脚手架模板的用处有限:
http://www.hanselman.com/blog/ModifyingTheDefaultCodeGenerationscaffoldingTemplatesInASPNETMVC.aspx