如何在 MVC 中自定义脚手架模板并更改 .cs.t4 文件
Posted
技术标签:
【中文标题】如何在 MVC 中自定义脚手架模板并更改 .cs.t4 文件【英文标题】:how customizing scaffolding template and change .cs.t4 file in MVC 【发布时间】:2016-05-19 00:02:13 【问题描述】:在 MVC 中,当我们需要像下面这样的表单来创建我的模型的新项目时,我们使用创建脚手架模板在模型上添加强类型视图, 型号:
public class book
[Key]
public int BId get; set;
[Display(Name = "نام")]
public string name get; set;
[Display(Name = "نویسنده")]
public string writer get; set;
[Display(Name = "ناشر")]
public string publisher get; set;
[Display(Name = "سال انتشار")]
public string year get; set;
`
结果是这样的:
@model مدرسه.Models.book
`@
ViewBag.Title = "BookStore";
`
` <h2>BookStore</h2>`
@using (html.BeginForm())
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>book</legend>
<div class="editor-label">
@Html.LabelFor(model => model.name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.name)
@Html.ValidationMessageFor(model => model.name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.writer)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.writer)
@Html.ValidationMessageFor(model => model.writer)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.publisher)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.publisher)
@Html.ValidationMessageFor(model => model.publisher)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.year)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.year)
@Html.ValidationMessageFor(model => model.year)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
``
<div>
@Html.ActionLink("Back to List", "Index")
</div>
`@section Scripts
@Scripts.Render("~/bundles/jqueryval")
`
此模板遵循此路径:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding
我需要知道如何更改这个文件,事实上这个文件是什么,什么部分改变了模板?
【问题讨论】:
你的问题到底是什么 我想拥有我的自定义模板并想编辑 .cs.t4 文件。如何编辑?我应该创建新文件并用旧文件替换它吗? 如果我错了,请纠正我。你已经创建了一个模板,然后你想自定义页面吧 是的,我想更改 .cs.t4 文件中的基于 html 代码。 我找到了Modifying the default code generation/scaffolding templates in ASP.NET MVC的链接 【参考方案1】:奇怪的是,很难找到……
全局编辑:
您可以修改原始模板,这将全局影响 跨所有 Visual Studio 项目的脚手架。 原始的 T4 脚手架模板位于 %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding\Templates 文件夹。
项目特定编辑:
要创建特定于项目的模板,请复制您想要的文件 从原始 T4 脚手架文件夹覆盖到 名为 CodeTemplates 的 ASP.NET MVC Web 项目(它必须有这个确切的 姓名)。按照惯例,脚手架子系统首先在 MVC 中查找 用于模板匹配的项目的 CodeTemplates 文件夹。
为此,您必须精确复制特定的子文件夹 您在原始模板文件夹中看到的名称和文件名。
进一步阅读:https://docs.microsoft.com/en-us/archive/msdn-magazine/2014/june/asp-net-mvc-override-the-default-scaffold-templates
【讨论】:
【参考方案2】:首先根据页面要求在视图Shared Folder
中创建自定义布局(模板)。
然后在脚手架上,选择布局(自定义模板)、模型等,然后单击确定。就这些
【讨论】:
这个解决方案选择了一个 .cshtml 文件,但它的默认模板仍然被替换为@RenderBody()
。我想更改该默认架构。例如,<div class="editor-field"> @Html.EditorFor(model => model.name) @Html.ValidationMessageFor(model => model.name) </div>
替换为我的自定义 html,如 <div id="myid"><div class="editor-field"><br /> @Html.EditorFor(model => model.name) @Html.ValidationMessageFor(model => model.name) </div></dive>
,用于我使用强类型创建的所有视图!
我想在脚手架模板文件中添加一些标签(.cs.t4
)
你必须创建一个自定义模板
在视图文件夹中->共享文件夹->根据您的要求创建一个新的视图文件
我认为你误解了它,或者我的英语很难解释我的问题:-D 无论如何,非常感谢你的尝试。以上是关于如何在 MVC 中自定义脚手架模板并更改 .cs.t4 文件的主要内容,如果未能解决你的问题,请参考以下文章
T4MVC 无法生成带有 ErrorGeneratingOutput 的类
如何在 Visual Studio 2017 的 ASP.NET MVC 中创建自定义生成/脚手架模板(Razor)?
如何在 ASP NET MVC 中自定义不显眼的验证 JQuery 消息?