如何修改Razor标签使其不生成id属性——Asp.net Core MVC 5
在ASP.NET Core MVC 5中移除Razor自动生成的HTML标签id属性
在ASP.NET Core MVC 5里,Razor会为input、select、textarea等标签自动生成包含id、name在内的属性,现在需要保留其他所有属性,仅移除id属性。
示例代码对比
- 渲染前的Razor代码:
<input type="text" asp-for="CodigoControle" class="form-control input" placeholder=""></input>
- 默认渲染后的HTML(含自动生成的id):
<input type="text" class="form-control input" placeholder="" data-val="true" data-val-maxlength="O campo Código de Controle deve ter no máximo 15 caracteres" data-val-maxlength-max="15" id="PaisViewModel_CodigoControle" maxlength="15" name="PaisViewModel.CodigoControle" value="">
- 期望的最终HTML(无id属性):
<input type="text" class="form-control input" placeholder="" data-val="true" data-val-maxlength="O campo Código de Controle deve ter no máximo 15 caracteres" data-val-maxlength-max="15" maxlength="15" name="PaisViewModel.CodigoControle" value="">
解决方案:实现自定义TagHelper
修改你的自定义TagHelper,添加目标标签匹配特性,并直接移除输出属性中的id即可:
using Microsoft.AspNetCore.Razor.TagHelpers; // 指定该TagHelper作用于input、select、textarea标签 [HtmlTargetElement("input")] [HtmlTargetElement("select")] [HtmlTargetElement("textarea")] public class RemoveIdTagHelper : TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { // 直接移除id属性 output.Attributes.RemoveAll("id"); } }
注册TagHelper
在项目的_ViewImports.cshtml文件中添加以下代码(替换YourAssemblyName为你的项目程序集名称),让Razor识别并应用这个自定义TagHelper:
@addTagHelper *, YourAssemblyName
说明
[HtmlTargetElement]特性用来指定TagHelper要处理的HTML标签类型,这里覆盖了所有需要移除id的目标标签;output.Attributes.RemoveAll("id")会直接从最终渲染的属性集合中移除id,确保生成的HTML中不会出现该属性,同时保留其他所有自动生成或手动添加的属性。
内容的提问来源于stack exchange,提问作者masterj
相关产品推荐
相关产品推荐

