MVC扩展方法错误
嗨,我已经得到了扩展方法在我PagingHelpers类:MVC扩展方法错误
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 => Url.Action("List", new {page = x}))
我得到这个错误:
'System.Web.Mvc.HtmlHelper' does not contain a definition for 'PageLinks' and no extension method 'PageLinks' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)
我在视图文件夹中的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>
请帮助我,我不知道我怎么能解决这个问题
尝试增加
@using SportsStore.WebUI.HtmlHelpers;
您.cshtml文件的顶部
您的名称空间方法也应该可以正常工作,因此请尝试关闭服务器以重建您的解决方案并再次运行
看来你做的一切都正确。 您是否在尝试使用Html帮助器之前编译了您的Web项目?
我将它添加到解决方案供将来参考,我相信它应该工作,但不重新启动服务器可能是问题 – 2011-12-26 22:00:47
看来您已将名称空间引用添加到根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>
不知道为什么这不是标记为答案,这是这个问题所指的练习的正确方法。刚帮了我。 – BanksySan 2013-02-02 16:48:53
您需要在您的List.cshtml的代码添加这条线之上
@model SportsStore.WebUI.Models.ProductsListViewModel
它的工作原理。谢谢! – mrtn 2011-12-26 21:44:35
没问题,你的命名空间方法应该也能正常工作,所以尝试击落服务器重新生成你的解决方案并再次运行,也许它不会使用@using语句 – 2011-12-26 21:46:22
将命名空间添加到views/web.config应该足够。我怀疑该项目在尝试使用html助手扩展之前未被重新编译。 – santiagoIT 2011-12-26 21:55:24