2017-02-01 5 views
0

System.Collections.Generic.List<string>にはAnyの定義が含まれていないと言って、RuntimeBinderExceptionと表示されています。 ValidationFailuresという動的ViewBagオブジェクト内にIEnumerable<string>が設定されています。ただし、この例外は、カミソリのページ通話中にスローされます。レイザーページレンダリング中のLinqエラー - すべてのための定義がありません

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

IEnumerableは下図のようにビューを返す前に、私のコントローラに追加されます。

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

通常、私はこれをアップチョークだろうLINQのへの参照を逃したが、LINQのは、Viewフォルダ内のweb.configファイル内に含まれている:私は@using System.Linqへの追加しようとしたそれの地獄のために

<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> 

ビューの上部にも表示されますが、これは動作を変更しませんでした。 Linqクエリは他のビューで正常に動作していますが、この単一のビューで問題が発生しています。

他に、この例外がスローされる可能性がありますか?

答えて

2

ViewBagのプロパティはdynamicであり、そのように拡張メソッドを呼び出すことはできません。あなたが明示的にそれを可能にするために自分の型にキャストすることができます

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

は、詳細はExtension method and dynamic objectを参照してください。

+0

@JNYRangerリンクされたqは詳しい説明をしています。ショート・エクステンション・メソッドはオブジェクトのメソッドではないため、実行時型だけではそれらを見つけるには不十分です。 –

+0

うん、私は読んで、私のコメントを削除し始めた。情報をありがとう! – JNYRanger

関連する問題