MVC3教程HtmlHelper无法正常工作

Ric*_*ard 3 asp.net-mvc razor asp.net-mvc-3

我遇到了MVC3 MusicStore教程的问题.它使用Truncate方法定义HtmlHelper.助手看起来像这样:

using System.Web.Mvc;

namespace MusicStore.Helpers
{
    public class HtmlHelpers
    {
        public static string Truncate(this HtmlHelper helper, string input, int length)
        {
            if (input.Length <= length)
            {
                return input;
            }
            else
            {
                return input.Substring(0, length) + "...";
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在视图中,我使用导入它@using MusicStore.Helpers,然后尝试使用它<td>@Html.Truncate(item.Title, 25) </td>

然而,编译器告诉我没有这样的方法(Truncate)存在,并且似乎在IEnumerable [MvcMusicStore.Models.Album](这是我的模型)而不是在我的HtmlHelpers类上寻找Truncate.

(注意,上面的方括号在我的代码中实际上是有角度的括号,无法逃脱它们)

谁能告诉我,我做错了什么?

Dar*_*rov 9

扩展方法应该在静态类中声明:

public static class HtmlHelpers
{
    public static string Truncate(
        this HtmlHelper helper, 
        string input, 
        int length
    )
    {
        if (input.Length <= length)
        {
            return input;
        }
        return input.Substring(0, length) + "...";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中确保您使用扩展方法引用了包含静态类的命名空间:

@using System.Web.Mvc
...
<td>@Html.Truncate(item.Title, 25)</td>
Run Code Online (Sandbox Code Playgroud)

或者如果您希望帮助程序在所有Razor视图中都可用而无需添加using指令,则可以将相应的命名空间添加到~/Views/web.config文件的名称空间部分:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="Namespace.Containig.Static.Class.With.Custom.Helpers" />
      </namespaces>
    </pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)