如何在ASP.NET Core MVC 2中使用ASP.NET MVC 5脚手架及生成对应表单?
嘿,我正好处理过类似的需求,给你几个可行的方案来在ASP.NET Core MVC 2环境中实现和ASP.NET MVC 5脚手架一样的两列表单布局(标签在左侧col-md-2,输入框在右侧col-md-10):
方案1:自定义全局脚手架模板(一劳永逸)
ASP.NET Core的脚手架模板是可修改的,你可以把MVC5的布局逻辑移植到Core的模板里,以后生成视图都会自动用这个结构:
- 找到Core MVC脚手架模板的默认路径:
一般在%USERPROFILE%\.nuget\packages\microsoft.visualstudio.web.codegenerators.mvc\2.2.0\Templates\Views\Create(把2.2.0换成你项目中对应的包版本) - 备份原有的
Create.cshtml和Create.cshtml.t4文件,防止改错了无法恢复 - 修改
Create.cshtml.t4模板中的表单组代码,替换成MVC5风格的结构:
<div class="form-group"> @Html.LabelFor(model => model.@PropertyName, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.@PropertyName, new { htmlAttributes = new { @class = "form-control", autocomplete = "off" } }) @Html.ValidationMessageFor(model => model.@PropertyName, "", new { @class = "text-danger" }) </div> </div>
- 保存模板后,再用Visual Studio的脚手架生成工具或者
dotnet aspnet-codegenerator命令创建Create视图,就能得到和MVC5完全一致的布局了。
方案2:项目内自定义局部模板(不影响全局)
如果你不想修改全局模板,可以在自己的项目里创建专属模板:
- 在项目根目录创建
Templates/Create文件夹,把修改好的Create.cshtml.t4模板放进去 - 用命令行生成视图时指定模板路径:
dotnet aspnet-codegenerator view Create Create -m YourModelName -dc YourDbContextName --template "Templates/Create/Create.cshtml.t4"
这样只会在当前项目使用自定义模板,不会影响其他项目。
方案3:手动修改生成后的视图(快速简单)
如果只是偶尔生成视图,直接修改生成后的代码更省事:
Core MVC 2默认生成的表单组是这样的:
<div class="form-group"> <label asp-for="Username" class="control-label"></label> <input asp-for="Username" class="form-control" /> <span asp-validation-for="Username" class="text-danger"></span> </div>
把它替换成你需要的MVC5风格(也可以用Core的Tag Helper来实现,更符合Core的最佳实践):
<div class="form-group"> <label asp-for="Username" class="control-label col-md-2"></label> <div class="col-md-10"> <input asp-for="Username" class="form-control" autocomplete="off" /> <span asp-validation-for="Username" class="text-danger"></span> </div> </div>
这样也能完美实现标签左对齐、输入框占满剩余宽度的布局。
需要注意的是,ASP.NET Core MVC 2默认的前端框架是Bootstrap 4,不过col-md-2、col-md-10这些列类在Bootstrap 4里依然有效,布局效果和Bootstrap 3(MVC5默认)几乎一致。
内容的提问来源于stack exchange,提问作者niico
相关产品推荐
相关产品推荐

