如何使scaffold模板添加新的自定义视图

时间:2013-11-04 15:14:50

标签: c# asp.net-mvc templates customization scaffold

Scaffold MVC默认视图模板的默认genaration为:

_CreateOrEdit
Edit
Create
Index

现在我想创建像

这样的模板
_CreateOrEdit
Edit
Create
Index
and new template _Index as subview in Index for PageListMVC 

你能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:0)

1。)转到:     C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ ItemTemplates \ CSharp \ Web \ MVC 4 \ CodeTemplates \ AddView \ CSHTML

2.。)将该文件夹复制到您的解决方案中并将其放在名为“CodeTemplates”

的文件夹中

3.删除除List.tt之外的所有文件 (除非您使用它们,否则我不会在此文件夹中包含文件。完成此文件后,您可以对此文件夹中最初的每个其他文件重复此过程。)

4.。)在List.tt文件的属性中更改

Build Action: NONE
Browse To Url: BLANK
Copy to Output Dir: DO NOT COPY

5.)将文件重命名为List_Div,然后根据需要编辑文件。然后,当你去支架List_Div将是一个新的选择。你必须为你想要这个功能的每个项目做这个。但是当我开始一个新项目时,我只是将目录复制到每个项目中。我有一个专门用于Bootstrap项目,FOundatons项目等的Views文件夹....

我将举例说明我的Foundation List_F5文件的样子,我只会向您展示重要的更改行(大约49到128行:

    <!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title><#= mvcHost.ViewName #></title>
</head>
<body>
<#
    PushIndent("    ");
}
#>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<div class="row">
    <div class="large-12 columns">
<#
List<ModelProperty> properties = GetModelProperties(mvcHost.ViewDataType);
foreach (ModelProperty property in properties) {
    if (!property.IsPrimaryKey && property.Scaffold) {
#>
        <div class="medium-1 columns">
            @Html.DisplayNameFor(model => model.<#= property.ValueExpression #>)
        </div>
<#
    }
}
#>
        <div class="medium-3 columns"></div>
    </div>

@foreach (var item in Model) {
    <div class="medium-12 columns">
<#
foreach (ModelProperty property in properties) {
    if (!property.IsPrimaryKey && property.Scaffold) {
#>
        <div class="medium-1 columns">
            @Html.DisplayFor(modelItem => <#= property.ItemValueExpression #>)
        </div>
<#
    }
}

string pkName = GetPrimaryKeyName(mvcHost.ViewDataType);
if (pkName != null) {
#>
        <div class="medium-3 columns">
            <a href="@Url.Action("Edit", "Edit", new { id=item.<#= pkName #> })"><i class="fa fa-pencil"></i></a> |
            <a href="@Url.Action("Details", "Details", new { id=item.<#= pkName #> })"><i class="fa fa-file"></i></a> |
            <a href="@Url.Action("Delete", "Delete", new { id=item.<#= pkName #> })"><i class="fa fa-times"></i></a>
        </div>
<#
} else {
#>
        <div class="medium-3 columns">
            <a href='@Url.Action("Edit", "Edit", new { /* id=item.PrimaryKey */ })"><i class="fa fa-pencil"></i></a> |
            <a href="@Url.Action("Details", "Details", new { /* id=item.PrimaryKey */ })"><i class="fa fa-file"></i></a> |
            <a href="@Url.Action("Delete", "Delete", new { /* id=item.PrimaryKey */ })"><i class="fa fa-times"></i></a>
        </div>
<#
}
#>
    </div>
}

</div>
<#
// The following code closes the asp:Content tag used in the case of a master page and the body and html tags in the case of a regular view page
#>
<#
if(mvcHost.IsContentPage) {
#>
<#
} else if(!mvcHost.IsPartialView && !mvcHost.IsContentPage) {
    ClearIndent();
#>
</body>
</html>