在为UrlHelper创建扩展方法时出错

时间:2013-09-28 10:06:55

标签: asp.net-mvc-4 url-rewriting

我正在使用此class在我的应用程序中使用干净的URL:

public static class UrlEncoder
    {
        public static string ToFriendlyUrl(this UrlHelper helper,
            string urlToEncode)
        {
            urlToEncode = (urlToEncode ?? "").Trim().ToLower();

            StringBuilder url = new StringBuilder();

            foreach (char ch in urlToEncode)
            {
                switch (ch)
                {
                    case ' ':
                        url.Append('-');
                        break;
                    case '&':
                        url.Append("and");
                        break;
                    case '\'':
                        break;
                    default:
                        if ((ch >= '0' && ch <= '9') ||
                            (ch >= 'a' && ch <= 'z'))
                        {
                            url.Append(ch);
                        }
                        else
                        {
                            url.Append('-');
                        }
                        break;
                }
            }

            return url.ToString();
        }
    }

我用这种方式上课:

<a href="/Products/@item.Id/@Url.ToFriendlyUrl(item.Name)">@item.Name</a>

但是我收到此错误并且扩展程序无效:

Compiler Error Message: CS1061: 'System.Web.Mvc.UrlHelper' does not contain a definition for 'ToFriendlyUrl' and no extension method 'ToFriendlyUrl' accepting a first argument of type 'System.Web.Mvc.UrlHelper' could be found (are you missing a using directive or an assembly reference?)

我已经使用指令添加了这些:

using System;
using System.Text;
using System.Web.Mvc;

我尝试this method,但我仍有同样的错误:

@UrlHelper.ToFriendlyUrl(item.Name)

并使用此指令using System.Web.Http.Routing;代替using System.Web.Mvc;,但我仍然遇到同样的错误。 似乎UrlHelper属于另一个集会,我不知道。

任何想法?
感谢您的建议

3 个答案:

答案 0 :(得分:2)

您还需要在视图中包含UrlEncoder类的命名空间:

@using Mynamespace

答案 1 :(得分:0)

从我的视图中调用UrlHelper扩展方法时遇到了类似的错误,但解决方案略有不同,所以我会分享它,以防它帮助其他人:

在我的扩展程序中,我需要将using System.Web.Http.Routing;替换为using System.Web.Mvc;

两者都解析UrlHelper,但MVC参考是您在视图中使用它所需要的。

答案 2 :(得分:0)

将接口( IUrlHelper )代替类名(UrlHelper)作为第一个参数。

public static class UrlEncoder  
    {  
        public static string ToFriendlyUrl(this **IUrlHelper** helper,
            string urlToEncode)  
         {  
         //your code  
        }  
}