【问题标题】:MVC extension method errorMVC 扩展方法错误
【发布时间】:2011-12-26 21:26:32
【问题描述】:

您好,我的 PagingHelpers 类中有一个扩展方法:

 namespace SportsStore.WebUI.HtmlHelpers
{
    public static class PagingHelpers
    {
        public static MvcHtmlString PageLinks(this HtmlHelper html,
                                               PagingInfo pagingInfo,
                                               Func<int, string> pageUrl)
        {
            StringBuilder result = new StringBuilder();
            for (int i = 1; i < pagingInfo.TotalPages; i++)
            {
                TagBuilder tag = new TagBuilder("a");
                tag.MergeAttribute("href", pageUrl(i));
                tag.InnerHtml = i.ToString();
                if (i == pagingInfo.CurrentPage)
                    tag.AddCssClass("selected");
                result.Append(tag.ToString());
            }

            return MvcHtmlString.Create(result.ToString());
        }
    }
}

这里我调用 List.cshtml 中的扩展方法:

@Html.PageLinks(Model.PagingInfo, x =&gt; Url.Action("List", new {page = x}))

我得到了这个错误:

'System.Web.Mvc.HtmlHelper' 不包含“PageLinks”的定义和扩展方法 'PageLinks' 接受类型的第一个参数 'System.Web.Mvc.HtmlHelper' 可以找到(您是否缺少 using 指令或程序集 参考?)

我在 Views 文件夹内的 web.config 中添加了命名空间:

<pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages"/>
    <add namespace="SportsStore.WebUI.HtmlHelpers"/>**
  </namespaces>
</pages>

请帮帮我,我不知道我该如何解决这个问题

【问题讨论】:

    标签: asp.net-mvc-3 c#-4.0 extension-methods


    【解决方案1】:

    尝试添加

    @using SportsStore.WebUI.HtmlHelpers;
    

    到 .cshtml 文件的顶部

    您的命名空间方法应该也能正常工作,因此请尝试关闭服务器重新构建您的解决方案并再次运行

    【讨论】:

    • 没问题,你的命名空间方法应该也能正常工作,所以尝试关闭服务器重建你的解决方案并再次运行,也许它可以在没有@using 语句的情况下工作
    • 将命名空间添加到views/web.config 确实足够了。我怀疑该项目在尝试使用 html 帮助程序扩展之前没有重新编译。
    • 我按照说明进行操作,但没有@using 语句就无法工作
    【解决方案2】:

    您似乎已将命名空间引用添加到根 web.config 文件。

    如果您将 MVC3 与 Razor 视图引擎一起使用,则必须将命名空间引用添加到 Views\web.config 文件。然后它将对 View 文件夹中的所有视图全局可用。

    <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="SportsStore.WebUI.HtmlHelpers"/>
        </namespaces>
      </pages>
    </system.web.webPages.razor>
    

    【讨论】:

    • 不知道为什么没有将其标记为答案,这是该问题所指练习的正确方法。刚刚帮了我。
    【解决方案3】:

    看来你做的一切都是正确的。 您是否在尝试使用 Html 帮助程序之前编译了您的 Web 项目?

    【讨论】:

    • 我将它添加到解决方案中以供将来参考,我相信它应该可以工作,但可能是没有重新启动服务器的问题
    【解决方案4】:

    你需要在你的 List.cshtml 上面添加这行代码

    @model SportsStore.WebUI.Models.ProductsListViewModel
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 2012-04-09
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多