【问题标题】:getting error when I create extension method for UrlHelper为 UrlHelper 创建扩展方法时出错
【发布时间】:2013-10-04 15:12:34
【问题描述】:

我正在使用这个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 指令:

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 属于另一个程序集,我不知道。

有什么想法吗?
感谢您的建议

【问题讨论】:

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


    【解决方案1】:

    传递接口(IUrlHelper)而不是类名(UrlHelper)作为第一个参数。

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

    【讨论】:

    • 请阅读editing help - 要将代码格式化为代码,您只需用3个反引号标记或缩进即可。您能否请edit您的答案并正确格式化。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      @using Mynamespace
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-31
        • 2013-12-23
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        • 1970-01-01
        相关资源
        最近更新 更多