博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]自定义ASP.NET MVC Html辅助方法
阅读量:5991 次
发布时间:2019-06-20

本文共 2769 字,大约阅读时间需要 9 分钟。

本文转自:

在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程序员来说,这是非常实用的。

转载地址:http://vwtlx.baihongyu.com/

你可能感兴趣的文章
Python对List中的元素排序
查看>>
swiper中有视频时,滑动停止后视频停止播放
查看>>
Prometheus 入门与实践
查看>>
PHPstorm自定义快捷键
查看>>
分布式存储系统设计 - Gossip
查看>>
ASP.NET2.0新特性小技巧
查看>>
REST服务开发实战,互联网营销
查看>>
【图论】拓扑排序应用
查看>>
Cocos Creator JS web平台复制粘贴代码(亲测可用)
查看>>
阻止ios锁屏
查看>>
头文件预编译 .
查看>>
SnagIt截图后无法在编辑器打开,不显示截图内容的解决办法
查看>>
jQuery插件之ajaxFileUpload
查看>>
基于LNMP的Zabbbix之Zabbix Agent源码详细安装,但不给图
查看>>
python 设计模式
查看>>
Android 隐藏系统状态栏
查看>>
Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件...
查看>>
ELF文件整体格式小结
查看>>
linux 下的 多线程http 下载器
查看>>
[转载]分享WCF聊天程序--WCFChat
查看>>