自定义ASP.NET MVC Html辅助方法
时间:2010-10-18 来源:luckdv
隐藏行号 复制代码 ?
-
public static class MyInputExtensions {
-
public static MvcHtmlString Input(this HtmlHelper htmlHelper, string name)
-
{
-
TagBuilder tagBuilder = new TagBuilder("input"); //设è置?标ê签?类à型í为ainput
-
tagBuilder.Attributes.Add("type", "file");//为a标ê签?添í加ótype属?性?及°值μ
-
tagBuilder.Attributes.Add("name", name);//为a标ê签?添í加óname属?性?及°值μ
-
tagBuilder.GenerateId(name);//为a标ê签?生ú成éId,?name参?数y代ú码?Id的?值μ
-
-
//创′建¨经-过yHTML加ó密ü的?字?符?串?
-
//TagRenderMode.SelfClosing枚?举ù值μ代ú表í当±前°标ê签?是?自?动ˉ关?闭?的?
-
return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing));
-
}
-
}
需要特别提醒的是,扩展方法类所在的命名空间最好设置为System.Web.Mvc,这样,我们在View中可以通过智能感知轻易找到,也不容易出错或者无法通过VS智能感知找到我们自定义的Html辅助方法,可以为我们省去很多不必要的麻烦。将上面代码编译,我们即可在View中通过智能感知看到我们自定义的Html辅助方法。如下图所示:
使用方法和其它Html辅助方法一样,如下代码所示:
<%: Html.Input("Path") %>
//字符串参数Path代表生成标签的name属性和id属性的值
二、实现自定义强类型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表í达?式?中D获?取?模£型í对?应|属?性?的?名?称?
-
TagBuilder tagBuilder = new TagBuilder("input");//设è置?标ê签?类à型í为ainput
-
tagBuilder.Attributes.Add("type", "file");//为a标ê签?添í加ótype属?性?及°值μ
-
tagBuilder.Attributes.Add("name", modelName);//为a标ê签?添í加óname属?性?及°值μ
-
tagBuilder.GenerateId(modelName);//为a标ê签?生ú成éId,?name参?数y代ú码?Id的?值μ
-
-
//创′建¨经-过yHTML加ó密ü的?字?符?串?
-
//TagRenderMode.SelfClosing枚?举ù值μ代ú表í当±前°标ê签?是?自?动ˉ关?闭?的?
-
return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing));
-
}
-
}
然后我们编译,在View中,我们就可以通过智能感知看到我们新扩展的强类型Html辅助方法了。如下图所示:
<%: Html.Input(model => model.Path) %>
//Path代表model的Path属性,生成标签的name和id的属性值均会是Path
三、为标签错误输入添加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://www.cnblogs.com/myshell/archive/2010/05/09/1731269.html
相关阅读 更多 +