【问题标题】:Linq Failure during Razor Page Rendering - No Definition for AnyRazor 页面渲染期间的 Linq 失败 - 没有任何定义
【发布时间】:2017-06-18 18:55:07
【问题描述】:

我收到RuntimeBinderExceptionSystem.Collections.Generic.List<string> 不包含Any 的定义。我在名为 ValidationFailures 的动态 ViewBag 对象中设置了一个 IEnumerable<string>。但是,在 Razor 页面调用中会引发此异常:

@if(ViewBag.ValidationFailures.Any())
{ ... }

IEnumerable 在返回视图之前添加到我的控制器中,如下所示:

ViewBag.ValidationFailures = TempData.ContainsKey("ValidationFailures")
                ? (IEnumerable<string>)TempData["ValidationFailures"]
                : Enumerable.Empty<string>();

通常,我会将其归结为缺少对 Linq 的引用,但 Linq 包含在 View 文件夹中的 web.config 文件中:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.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.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="myProject" />
      </namespaces>
    </pages>
</system.web.webPages.razor>

为了它,我尝试将@using System.Linq 也添加到视图的顶部,但这并没有改变行为。 Linq 查询在其他视图中运行良好,但这个单一视图给我带来了问题。

还有什么可能导致这个异常被抛出?

【问题讨论】:

    标签: c# asp.net-mvc linq razor dynamic


    【解决方案1】:

    ViewBag 的属性是dynamic,你不能这样调用扩展方法。

    您可以显式转换为您的类型以使其成为可能:

      @if(((IEnumerable<string>)ViewBag.ValidationFailures).Any())
    

    请参阅Extension method and dynamic object 了解更多信息。

    【讨论】:

    • @JNYRanger linked q 有详细解释,简而言之 - 扩展方法是 not 对象的方法 - 因此仅运行时类型不足以找到它们。
    • 是的,我开始阅读并删除了我的评论。感谢您的信息!
    猜你喜欢
    • 2018-12-09
    • 2016-08-20
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多