手机版

ASP.NET核心标签助手标签助手表单的高级用法

时间:2021-09-04 来源:互联网 编辑:宝哥软件园 浏览:

在上一篇博客中,我解释了TagHelper的基本用法和自定义标签的生成,所以我就趁热打铁,和大家分享一下TagHelper的高级用法~ ~,大家可以在我的博客下随意留言。

对于我与ASP.NET核心的最初接触,我可以看看我对TagHelper的理解和看法:

《asp.net core新特性(1):TagHelper》

之后我会继续写博文,分享一些ASP.NET Core的新特性,比如DI、ViewComponent、bower,这些都是ASP.NET MVC中没有的。

好了,我们开始吧~ ~

就像我之前分享的TagHelper中提到的,TagHelper可以替代原来@html help类中的一些函数,比如form、a等标签,用Html代码写更舒服,符合Html语法。

!-tag assistant form-form ASP-controller=' home ' ASP-action=' index ' class=' form-horizontal '方法=' post'/form!- Html帮助类版本表单-@使用(Html。begin form ('index ',' home ',formmethod。post,new { class=' form-horizontal ' })}){ }那么,对于在html帮助类中最有用的Model和Tag之间的转换以及自动表单的生成,微软是否也给出了解决方案呢?答案是肯定的。微软还建立了一个单独的指令页面来描述TagHelper的自动表单生成。英语水平好的同学可以直接查看MS的官方文档《Introduction to using tag helpers in forms in ASP.NET Core》。

文档中提到,对于表单控件,我们可以在asp-for属性中直接填写Model中的属性名称,这样可以自动生成对应的控件类型,并填写默认值。

好吧,让我们试一试。

(1)创建一个视图模型类

公共类注册视图模型{[必需][显示(名称='用户名')] [MaxLength(30,ErrorMessage='用户名不能超过30')]公共字符串UserName { get设置;}[必需][数据类型(数据类型。密码)][正则表达式(@ '((?=.*\d)(?=.*\D)|(?=.*[a-zA-Z])(?=.*[a-za-z])$ ',errormessage=' password至少包含两个字符')] [Display(Name=' password')]公共字符串Password { get设置;} [DataType(数据类型。mullinetext)])公共字符串描述{ get设置;}}对于在ASP.NET写过MVC的开发者来说,肯定不会不熟悉这个验证方法~ ~

(2)编写TagHelper标签

为了区别于Html,我写了两者的对比版本

表单ASP-controller=' Home ' ASP-action=' signing '方法=' post ' class=' form-horizontal ' div class=' form-group '标签asp-for='UserName'/标签输入ASP-for=' UserName '/span ASP-validation-for=' UserName '/span/div class=' form-group ' @ Html。LabelFor(m=m.Password) @Html。PasswordFor(m=m.Password) @Html。ValidationMessageFor(m=m . Password)/div class=' form-group ' Label ASP-for=' Description '/Label textarea ASP-for=' Description '/textarea span ASP-validation-for=' Description '/span/div class=' form-group ' input type=' submit ' value=' submit '/input type=' reset ' value=' reset '/div/form(3)

public IActionResult注册(SignUpViewModel模型){ if (ModelState。IsValid){ returnredirecttoaction(' Index ');} else { return RedirectToAction(' Index ',模型);} }(4)结果

好了,如果你觉得已经结束了,那就不是TagHelper高级应用,顶多只能翻译MS文档。

所以,重点是。既然MS可以让我们创建自定义的TagHelper,为什么我不能在TagHelper中使用Model的值呢?于是我开始在ASP.NET搜索Core的开源github项目,最终找到了ImputTagHelper的源代码。

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

受保护的IHtmlGenerator生成器{ get}[html attributenotbound][ViewContext]公共视图上下文视图上下文{ get设置;} ///summary ///要根据当前模型计算的表达式。////summary[html attributename(FOrtattributename)]public model expression For { get;设置;}这三个对象都是通过依赖注入生成的。

(1)生成器是生成器,负责生成各种类型的标签

(2)视图上下文是视图上下文,获取视图上下文的相关信息

(3)对于获取到当前模型的相关信息,包括需要等关键信息

有了这三个标签,我们也可以在自定义的标签助手中获取你想要的模型信息,比如我可以向形式中填入模型信息,让标签助手自动生成形式表单中的所有内容;也可以向保险商实验所标签中填入树信息,让其自动生成树列表等等

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

//自定义标签助手名为BG-form[html target element(' BG-form ')]公共类FormTagHelper : TagHelper {[ViewContext][html attributenotbound]公共视图上下文视图上下文{获取设置;}[html attributename(' ASP-For ')]公共模型表达式For { get设置;}受保护的ihtmlgelegenerator生成器{ get } public FormTagHelper(ihtmlgelegergenerator Generator){ Generator=Generator;}[html属性名(' ASP-Controller ')]公共字符串控制器{ get设置;}[html属性名(' ASP-Action ')]公共字符串操作{ get设置;} //异步方法公共覆盖异步任务进程同步(标记帮助上下文上下文,标记帮助输出输出){输出。标记名=' formif(!字符串IsNullOrWhiteSpace(控制器)){输出。属性。添加('操作','/'控制器'/'操作);}输出。属性。添加('类','水平形式');//获取子属性var props=For .属性;foreach(道具中的定义变量道具){ //生成表单var div=new TagBuilder(' div ');div .addcsclass(' form-group ');变量标签=生成器GenerateLabel(视图上下文,道具,空,道具.元数据。DisplayName,null);无功输入=发电机. GenerateTextBox(视图上下文,道具,道具。元数据。PropertyName,null,null,null);可变跨度=发电机GenerateValidationMessage(视图上下文,道具,道具。元数据。属性名,空,视图上下文ValidationMessageElement,null);div .InnerHtml。AppendHtml(标签);div .InnerHtml。AppendHtml(输入);div .InnerHtml。append html(span);输出内容。append html(div);} //添加按钮var BTN=新标记构建器(' div ');btn .addcsclass(' form-group ');var submit=new TagBuilder(' input ');提交。属性。添加('类型','提交');提交。属性。添加('值','提交');var reset=新标签生成器(' input ');重置。属性。添加('类型','重置');重置。属性。添加('值','重置');btn .InnerHtml。AppendHtml(提交);btn .InnerHtml。AppendHtml(重置);输出内容。附加html(BTN);//将原有的内容添加到标签内部输出内容。AppendHtml(等待输出GetChildContentAsync());} }只要在超文本标记语言加入

BG-form ASP-controller=' Home ' ASP-action=' registration ' ASP-for=' @ Model/' BG-form即可自动生成表单

完毕,今天关于TagHelper就分享到这

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:ASP.NET核心标签助手标签助手表单的高级用法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。