Search code examples
asp.net-mvc-3paginationrazormvccontrib

MVC3 doesn't recognize MvcContrib namespace in Razor View


I'm trying to paginate something with MvcContrib's Html.Pager(), but my razor views can't reference the right namespace.

Controller is ok:

using MvcContrib.Pagination;
...
public ActionResult List(int? page)
{
    return View(new UserRepository().GetUserList().AsPagination(page ?? 1, 10));
}

But, the view can't make sense of either:

@using MvcContrib

OR

@Html.Pager((IPagination)Model)

I installed MvcContrib via NuGet. I tried adding MvcContrib, MvcContrib.UI and MvcContrib.UI.Html namespaces to <pages><namespaces> in web.config with no luck. Did I miss something?


Solution

  • Contrary to WebForms, Razor doesn't use the <namespaces> section in ~/web.config. It uses the <namespaces> in ~/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="MvcContrib"/>
            <add namespace="MvcContrib.UI.Grid"/>
            <add namespace="MvcContrib.UI.Pager"/>
          </namespaces>
        </pages>
      </system.web.webPages.razor>
    

    and then:

    @model MvcContrib.Pagination.IPagination<SomeViewModel>
    @Html.Pager(Model)
    

    or you could also add the proper namespace to your view if you prefer:

    @model MvcContrib.Pagination.IPagination<SomeViewModel>
    @using MvcContrib.UI.Pager
    @Html.Pager(Model)