千家信息网

asp.net core中TagHelper+Form如何使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关asp.net core中TagHelper+Form如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。T
千家信息网最后更新 2026年11月02日asp.net core中TagHelper+Form如何使用

本篇文章给大家分享的是有关asp.net core中TagHelper+Form如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

TagHelper能够去替代原来在@Html帮助类中的一些功能,比如form,a等标签,而且写在html代码中更加的舒服,符合html的语法。

@using (Html.BeginForm("Index", "Home", FormMethod.Post,, new { Class = "form-horizontal" }))

{

}

 那么,在Html帮助类中最有用的Model与Tag的转换,自动表单的生成,微软是否也给出了解决方案呢?答案是肯定的。Microsoft还专门分出了单独的说明页面来讲述TagHelper的自动表单生成,英文功底好的同学可以直接查看MS的官方文档《Introduction to using tag helpers in forms in ASP.NET Core》。

  文档中提及了对于表单控件,我们可以直接在asp-for属性中直接填写Model中的属性名,即可自动生成对应的控件类型和填入默认值。

  ok,我们来尝试一下。

  (1)创建ViewModel类

public class SignUpViewModel

{

[Required]

[Display(Name ="用户名")]

[MaxLength(30,ErrorMessage = "用户名不能超过30")]

public string UserName { get; set; }

[Required]

[DataType(DataType.Password)]

[Regular_Expression(@"((?=.*\d)(?=.*\D)|(?=.*[a-zA-Z])(?=.*[^a-zA-Z]))^$",ErrorMessage ="密码至少包含两种以上字符")]

[Display(Name ="密码")]

public string Password { get; set; }

[DataType(DataType.MultilineText)]

public string Description { get; set; }

}

对于写过asp.net mvc的开发者肯定不会陌生这种验证方式~~

  (2)编写TagHelper标签

  为了与Html区分,我写了两者的比较版本

@Html.LabelFor(m=>m.Password)

@Html.PasswordFor(m=>m.Password)

@Html.ValidationMessageFor(m=>m.Password)

(3)验证表单

public IActionResult SignUp(SignUpViewModel model)

{

if (ModelState.IsValid)

{

return RedirectToAction("Index");

}

else

{

return RedirectToAction("Index",model);

}

}

(4)结果

  

  ok,如果觉得这样就结束了,那么就不算TagHelper高级应用,那只能充其量在翻译MS的文档罢了。

  那么,重点来了,既然MS能让我们创建自定义TagHelper,那我为什么不能在TagHelper当中使用Model的值呢?于是我开始在asp.net core开源github项目中寻找,终于是找到了ImputTagHelper的源码。

  在源码中,由三个对象一起来完成标签的生成

protected IHtmlGenerator Generator { get; }

[HtmlAttributeNotBound]

[ViewContext]

public ViewContext ViewContext { get; set; }

///

/// An expression to be evaluated against the current model.

///

[HtmlAttributeName(ForAttributeName)]

public ModelExpression For { get; set; }

三个对象均是通过依赖注入的方式来实现对象的生成。

  (1)其中Generator为发生器,负责生成各种类型的标签

  (2)ViewContext为视图上下文,获取视图上下文相关信息

  (3)For获取到当前Model的相关信息,包括Required等关键信息

  有了这三个标签,我们也可以在自定义的标签助手中获取你想要的Model信息,比如我可以向form中填入Model信息,让标签助手自动生成form表单中的所有内容;也可以向ul标签中填入树信息,让其自动生成树列表等等

  如下就是我编写的自动生成表单

//自定义标签助手名为bg-form

[HtmlTargetElement("bg-form")]

public class FormTagHelper : TagHelper

{

[ViewContext]

[HtmlAttributeNotBound]

public ViewContext ViewContext { get; set; }

[HtmlAttributeName("asp-for")]

public ModelExpression For { get; set; }

protected IHtmlGenerator Generator { get; }

public FormTagHelper(IHtmlGenerator generator)

{

Generator = generator;

}

[HtmlAttributeName("asp-controller")]

public string Controller { get; set; }

[HtmlAttributeName("asp-action")]

public string Action { get; set; }

//异步方法

public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)

{

output.TagName = "form";

if (!string.IsNullOrWhiteSpace(Controller))

{

output.Attributes.Add("action", "/" + Controller + "/" + Action);

}

output.Attributes.Add("class", "form-horizontal");

//获取子属性

var props = For.ModelExplorer.Properties;

foreach (var prop in props)

{

//生成表单

var div = new TagBuilder("div");

div.AddCssClass("form-group");

var label = Generator.GenerateLabel(ViewContext, prop, null, prop.Metadata.DisplayName, null);

var input = Generator.GenerateTextBox(ViewContext, prop, prop.Metadata.PropertyName, null, null, null);

var span = Generator.GenerateValidationMessage(ViewContext, prop, prop.Metadata.PropertyName, null, ViewContext.ValidationMessageElement, null);

div.InnerHtml.AppendHtml(label);

div.InnerHtml.AppendHtml(input);

div.InnerHtml.AppendHtml(span);

output.Content.AppendHtml(div);

}

//添加按钮

var btn = new TagBuilder("div");

btn.AddCssClass("form-group");

var submit = new TagBuilder("input");

submit.Attributes.Add("type", "submit");

submit.Attributes.Add("value", "提交");

var reset = new TagBuilder("input");

reset.Attributes.Add("type", "reset");

reset.Attributes.Add("value", "重置");

btn.InnerHtml.AppendHtml(submit);

btn.InnerHtml.AppendHtml(reset);

output.Content.AppendHtml(btn);

//将原有的内容添加到标签内部

output.Content.AppendHtml(await output.GetChildContentAsync());

}

}

只要在html加入

即可自动生成表单

以上就是asp.net core中TagHelper+Form如何使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

生成 标签 表单 信息 自动生成 三个 助手 对象 属性 文档 上下 上下文 内容 密码 就是 控件 方式 更多 源码 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 深圳市人人互联网科技有限公司 苏州找大状互联网科技有限公司 互联网与科技发展 科技互联网技术 深圳互联网科技公司 互联网的科技创新 互联网 的科技创新 互联网科技缩写 甘肃拓世互联网科技有限公司 哈尔滨屹滨互联网科技有限公司 华夏恒生互联网科技013171 洛阳共同富裕互联网科技有限公司 世界互联网领先科技成果获奖 互联网科技如何创业 元气玛特互联网科技公司是外包吗 小米互联网科技园入驻 电子商务与互联网科技的关系 互联网科技收购价值 科技互联网公司两年变化 西安纸贵互联网科技有限公司 互联网科技有限公司图片 山东吉时兔互联网科技有限公司 金融科技与互联网金融相同和不同 南博望互联网科技有限公司 锡山区互联网智能科技产品供应 电子商务与互联网科技的关系 互联网科技融合创新 万物互联网智能科技 互联网对科技影响
0