六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 146|回复: 0

Mvc扩展Html.ActionLink(强类型扩展)

[复制链接]

升级  46.33%

105

主题

105

主题

105

主题

举人

Rank: 3Rank: 3

积分
339
 楼主| 发表于 2012-12-10 14:12:29 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">在网上看了有说把ActionLink扩展成类似于@Html.ActionLink<T>(T=>T.Index(...))这种写法的,但是按照他们的代码写都没有试成功,于是就自己写了一个,但是只支持
@{Html.ActionLink<T>(T=>T.Index(...));}这种写法,因为@Html.ActionLink<T>(T=>T.Index(...))这种写法会报错,具体是什么原因也不清楚。
代码写的不是很好,仅供参考:

    public static void ActionLink<T>(this HtmlHelper helper, Expression<Action<T>> Action, string linkname, dynamic para) where T : class
        {
            string lamda = Action.ToString();
            string lamexp = lamda.Substring(lamda.IndexOf('.') + 1);
            string action = lamexp.Substring(0, lamexp.IndexOf('('));
            string controller = helper.ViewContext.RouteData.Values["controller"].ToString();
            StringBuilder builder = new StringBuilder();
            builder.AppendFormat("<a  href='/{0}/{1}", controller, action);
            if (para != null)
            {
                var props = para.GetType().GetProperties();
                builder.Append("?");
                foreach (var item in props)
                {
                    string paraName = item.Name;
                    object paraVal = item.GetValue(para, null);
                    builder.AppendFormat("{0}={1}", paraName, paraVal);
                    builder.Append("&");
                }
                builder.Remove(builder.Length - 1, 1);
            }
            builder.Append("'>");
            builder.Append(linkname);
            builder.Append("</a>");
            HttpContext.Current.Response.Write(builder.ToString());
        }
如果谁有更好的办法可以留言一下,谢谢!
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表