【问题标题】:PagedList.Mvc throws exception on MvcHtmlStringPagedList.Mvc 在 MvcHtmlString 上抛出异常
【发布时间】:2015-08-03 07:29:51
【问题描述】:

我正在尝试在 Visual Studio 2015 RC 中使用出色的 PagedList.Mvc 分页库,但在我看来却遇到了这个异常:

“MvcHtmlString”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Web.Mvc,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”的引用。 web.app.DNX 4.5.1

我已尝试添加 System.Web.Mvc 引用,但它在引用下不可用。

这是我抛出错误的观点:

@using PagedList.Mvc; //import this so we get our HTML Helper
@using PagedList; //import this so we can cast our list to IPagedList (only necessary because ViewBag is dynamic)
@using web.app.Models;

@model StaticPagedList<Entry>

@{
    if (Model.Count > 0)
    {
        @foreach (Entry entry in Model)
        {
            <h3>@entry.Title</h3>
            <h4>@entry.PublishDate</h4>
            <div>@Html.Raw(@entry.content.text)</div>
            <hr>
        }
        <!-- output a paging control that lets the user navigation to the previous page, next page, etc -->
        @Html.PagedListPager(@Model, page => Url.Action("~/Views/Shared/_RssFeedPartial", new { page }))
    }
    else
    {
        <p>There are no blog items to be displayed at this time.</p>

    }
}   

这是它的控制器:

public async Task<ActionResult> Index(int? page)
{
    var pageIndex = (page ?? 1) - 1;
    var pageSize = 2;
    int totalPostCount;

    var feedItems = await RssManager.GetFeedItems("http://example.com/blogs/news", pageIndex, pageSize);
    totalPostCount = feedItems.Count;

    var postsAsIPagedList = new StaticPagedList<Entry>(feedItems, pageIndex+1, pageSize, totalPostCount);
    ViewBag.OnePageOfPosts = postsAsIPagedList;

    return View();
}

更新 1:需要注意的一点——父页面以这种方式在 ViewBag 列表中发送:

@Html.Partial("~/Views/Shared/_RssFeedPartial", (IPagedList)ViewBag.OnePageOfPosts

更新 2:在进行了 @Tommy 和 @Aegis 建议的更改后,现在出现以下错误:

'RazorPreCompileModule' 不包含带有 1 个参数的构造函数 web.app.DNX 4.5.1 ...\src\web.app\compiler\preprocess\RazorPreCompilation.cs 8

“IServiceCollection”不包含“AddMvc”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的扩展方法“AddMvc”(您是否缺少 using 指令或程序集引用?) web.app .DNX 4.5.1 ...\src\web.app\Startup.cs 69

“IApplicationBuilder”不包含“UseMvc”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的扩展方法“UseMvc”(您是否缺少 using 指令或程序集引用?) web.app .DNX 4.5.1 ...\src\web.app\Startup.cs 113

“IHtmlHelper>”不包含“PagedListPager”的定义,并且最佳扩展方法重载“HtmlHelper.PagedListPager(HtmlHelper, IPagedList, Func)”需要“HtmlHelper”类型的接收器 web.app.DNX 4.5.1 ...\src\web.app\Views\Shared_RssFeedPartial.cshtml 23

【问题讨论】:

  • 您是否尝试过通过 NuGet 下载 Microsoft ASP.NET MVC 包?我相信这是添加缺失库的最简单方法。
  • 谢谢,@Aegis。哪个版本?
  • 如果您不确定哪个版本,我会下载最新的。
  • @Aegis:我会得到预发布版本:nuget.org/packages/Microsoft.AspNet.Mvc/6.0.0-beta4
  • 除非您在 ASP vNext 上运行,否则我不会获得预发布版本。此外,除非您只是进行测试,否则您可能不应该使用任何预发布版本。我相信当前完整的生产 MVC 版本是 5.2.3

标签: c# asp.net-mvc asp.net-mvc-4 pagination


【解决方案1】:

确保您在根 web.config 文件中配置了正确的程序集重定向。这个程序集似乎正在寻找 MVC 版本 4,专门。要添加程序集重定向,请打开您的 web.config 文件并添加以下信息(假设使用 MVC 的最新生产版本):

<runtime>
    <assemblyBinding>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
          </dependentAssembly>
        </assemblyBinding>
</runtime>

这将导致对任何版本的 System.Web.Mvc 程序集的任何请求都是对您已安装的版本的调用。如果您没有安装 MVC,请使用 Nuget 安装包和所有相关依赖项。

注意,您的 web.config 中可能已经有此部分,如果有,只需添加或更新当前的 System.Web.Mvc 绑定重定向。

【讨论】:

  • 谢谢,@Tommy。现在得到新的错误。请参阅上述问题的更新。
  • 看来我的应用程序除了 ASP.NET MVC 的预发布版本之外不会运行任何东西。一旦我更新到那个并删除了 PageList.Mvc 的东西,应用程序就会编译。有没有办法将上面的web.config 映射到Microsoft.AspNet.Mvc 6.0.0-beta4 版本?这只是为了测试。谢谢。
  • @Alex - 当然,只需将版本从 5.2.3.0 更改为 6.0.0.0。但是,由于 Mvc 6 是针对 vNext 编写的,我敢打赌您可能在此插件和 MVC 6 之间存在一些兼容性问题
【解决方案2】:

通过包管理器或 GUI 通过 NuGet 安装一个版本的 ASP.NET MVC 包:https://www.nuget.org/packages/Microsoft.AspNet.Mvc/

PM> Install-Package Microsoft.AspNet.Mvc

【讨论】:

  • 谢谢,@Aegis。刚刚安装了Microsoft.AspNet.Mvc 6.0.0-beta4,但还是报错。
  • 之前曾在此处发布过类似的问题:stackoverflow.com/questions/5853442/… 似乎他们缺少对 System.Web 的引用。你试过添加吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-24
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多