如何在 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() 。我想更改该默认架构。例如,&lt;div class="editor-field"&gt; @Html.EditorFor(model =&gt; model.name) @Html.ValidationMessageFor(model =&gt; model.name) &lt;/div&gt; 替换为我的自定义 html,如 &lt;div id="myid"&gt;&lt;div class="editor-field"&gt;&lt;br /&gt; @Html.EditorFor(model =&gt; model.name) @Html.ValidationMessageFor(model =&gt; model.name) &lt;/div&gt;&lt;/dive&gt;,用于我使用强类型创建的所有视图! 我想在脚手架模板文件中添加一些标签(.cs.t4 你必须创建一个自定义模板 在视图文件夹中->共享文件夹->根据您的要求创建一个新的视图文件 我认为你误解了它,或者我的英语很难解释我的问题:-D 无论如何,非常感谢你的尝试。

以上是关于如何在 MVC 中自定义脚手架模板并更改 .cs.t4 文件的主要内容,如果未能解决你的问题,请参考以下文章

T4MVC 无法生成带有 ErrorGeneratingOutput 的类

如何在 Visual Studio 2017 的 ASP.NET MVC 中创建自定义生成/脚手架模板(Razor)?

如何在 ASP NET MVC 中自定义不显眼的验证 JQuery 消息?

如何在 ASP.NET MVC 3 中自定义不显眼的验证以匹配我的风格?

在 yii2 中自定义网格视图

如何更改 Rails 脚手架中的默认模型模板?