Asp.Net_自定义MVC Html
自定义ASP.NET MVC Html辅助方法
在ASP.NET
MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明。有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么,我们就可以通过自己定义一个Html扩展方法来达到这个目的。
比如,到目前为止,Html扩展方法中没有关于<input
type="file" />这类标签的辅助方法,那么我们就可以自已实现一个。本文以实现<input type="file"
/>标签为例,演示如何实现自定义Html扩展方法。
一、实现自定义弱类型Html扩展方法
其实实现自定义Html扩展方法并不难,有兴趣的同学可以去看下MVC源代码,关于Html扩展方法部分。要用到System.Web.Mvc命名空间下的TagBuilder类,MvcHtmlString类。TagBuilder类为Html辅助方法生成HTML标签,MvcHtmlString代表HTML编码的字符串。扩展方法代码如下所示:
public static class MyInputExtensions { public static MvcHtmlString Input(this HtmlHelper htmlHelper, string name) { TagBuilder tagBuilder = new TagBuilder("input");//设置标签类型为input tagBuilder.Attributes.Add("type", "file");//为标签添加type属性及值 tagBuilder.Attributes.Add("name", name);//为标签添加name属性及值 tagBuilder.GenerateId(name);//为标签生成Id,name参数代码Id的值 //创建经过HTML加密的字符串 //TagRenderMode.SelfClosing枚举值代表当前标签是自动关闭的 return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing)); } }
需要特别提醒的是,扩展方法类所在的命名空间最好设置为System.Web.Mvc,这样,我们在View中可以通过智能感知轻易找到,也不容易出错或者无法通过VS智能感知找到我们自定义的Html辅助方法,可以为我们省去很多不必要的麻烦。将上面代码编译,我们即可在View中通过智能感知看到我们自定义的Html辅助方法。如下图所示:
使用方法和其它Html辅助方法一样,如下代码所示:
<%: Html.Input("Path")
%>
//字符串参数Path代表生成标签的name属性和id属性的值
需要说明的是,本例所示是为了生成<input
type="file">标签,是不用设置值的,读者可以通过自身情况定义扩展方法。然后运行,通过浏览器查看HTML源代码,如下图所示:
二、实现自定义强类型Html辅助方法
强类型辅助方法的一个好处是,我们可以通过编译器为我们检测一些错误,为我们节省一些排错的时间与精力。所以,强类型Html辅助方法是不可缺少的。代码如下:
代码
public
static class MyInputExtensions
{
public static MvcHtmlString
Input<TModel, TValue>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TValue>> expression)
{
string modelName =
ExpressionHelper.GetExpressionText(expression);//从Lambda表达式中获取模型对应属性的名称
TagBuilder tagBuilder = new TagBuilder("input");//设置标签类型为input
tagBuilder.Attributes.Add("type", "file");//为标签添加type属性及值
tagBuilder.Attributes.Add("name", modelName);//为标签添加name属性及值
tagBuilder.GenerateId(modelName);//为标签生成Id,name参数代码Id的值
//创建经过HTML加密的字符串
//TagRenderMode.SelfClosing枚举值代表当前标签是自动关闭的
return
MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing));
}
}
然后我们编译,在View中,我们就可以通过智能感知看到我们新扩展的强类型Html辅助方法了。如下图所示:
我们可以通过如下代码使用新扩展的Html辅助方法:
<%:
Html.Input(model => model.Path)
%>
//Path代表model的Path属性,生成标签的name和id的属性值均会是Path
运行,我们通过浏览器查看生成的Html源代码如下图所示:
三、为标签错误输入添加CSS支持
对于要求输入的标签,如Text,如果用户输入错误内容,我们可以为当前标签添加CSS错误提示,为用户提供一个更加友好、人性化的界面。代码如下所示:
代码
ModelState
modelState;
if (htmlHelper.ViewData.ModelState.TryGetValue(name, out
modelState))
{
if (modelState.Errors.Count > 0)
{
//添加错误提示CSS
tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName);
}
}
将以上代码复制到我们自定义的扩展方法的返回MvcHtmlString字符串之前即可。
四、总结
本文通过演示如果实现自定义<input
type="file" />标签的Html辅助方法,展示了如何在ASP.NET MVC中实现自定义Html辅助方法。对于ASP.NET
MVC程序员来说,这是非常实用的。
相关文章
- .NET高级语法:委托(switch,错误处理,缓存处理,数据库调用处理),linq to object
- asp.net 高级应用 泛型generic(定义,原理,约束,缓存,协变,逆变)
- How can I implement caching in ASP.NET?
- nuget安装.net standard
- How do I force my .NET application to run as administrator?
- 下载远程(第三方服务器)文件、图片,保存到本地(服务器)的方法、保存抓取远程文件、图片 将图片的二进制字节字符串在HTML页面以图片形式输出 asp.net 文件 操作方法
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- asp.net mvc Html.BeginForm()及Html.Action用法
- asp.net mvc 控制器和视图的花式玩法
- ASP.net_form表单提交路径和之前做的其他网站路径都一样,但是提交后显示404错误,找不到页面
- asp.net 框架初接触
- IIS中配置asp.net出现用户 NT AUTHORITYNETWORK SERVICE 登录失败(sql2005/2008解决方法)
- 【asp.net】MVC中通过三层架构获取数据库值的示例(包括CSHTML前台和后台Model/BLL/DAL)
- Asp.Net上传文件的大小限制的改变方法!(转)
- ASP.NET - MVC框架及搭建教程
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)
- 总结ASP.NET MVC视图页使用jQuery传递异步数据的几种方式
- .net和java和谐相处之安卓客户端+.net asp.net mvc webapi 2
- 一个完整的类用来生成RSACryptoServiceProvider单例类(.NET)
- ASP.NET(C#)常用数据加密和解密方法汇总
- 使用ASP.NET操作IIS7中使用应用程序
- 实验五 ASP.NET状态管理和应用程序配置 总结
- asp.net 性能提升
- IIS-真正解决ASP.NET每一个页面首次访问超级慢的问题
- asp.net页面中的Console.WriteLine结果如何查看