最近研究MVC,确实是个好东西啊,但是自带的 @Html.ActionLink方法只能生成简单的控件,想要给加个onclick事件都不行,于是查找了资料,但是都没有一个比较详细的介绍,最后还是半摸索半查找弄出来了。
首先要在类里添加一个能够融合自定义属性的控件,最好写在某个公用类里面。
namespace EduWeb.Common { public static class HtmlHelperEx { public static MvcHtmlString ActionLinkForJS(this HtmlHelper htmlHelper, string linkText, object htmlAttributes) { if (String.IsNullOrEmpty(linkText)) { throw new ArgumentException("linkText"); } TagBuilder linkTag = new TagBuilder("a"); linkTag.InnerHtml = linkText; linkTag.MergeAttribute("href", "javascript:void(0)"); linkTag.MergeAttributes(new RouteValueDictionary(htmlAttributes)); return new MvcHtmlString(linkTag.ToString(TagRenderMode.Normal)); } } }
要注意的是一定要返回MvcHtmlString类型的,如果直接返回tostring,会在页面上显示成字符串。这里面其实核心就是
linkTag.MergeAttributes(new RouteValueDictionary(htmlAttributes));
这一句,意思是把控件的属性都附加上去。
这样在VIEW里就可以给控件加上想要的属性了,不仅仅能加事件,还可以加各种自定义的属性来保存想要的信息。
@Html.ActionLinkForJS("重置密码", new { onclick = "alertEx('" + item.UserId + "')", customvalue = item.UserId })
这个控件就会有一个customvalue的属性,能够取到userid,非常方便