2017-02-01 6 views
0

Я получаю RuntimeBinderException, говоря, что System.Collections.Generic.List<string> не содержит определения для Any. У меня есть IEnumerable<string>, установленный в динамическом объекте ViewBag, называемом ValidationFailures. Однако, это исключение в Бритве странице призванию:Linq Failure во время Razor Page Rendering - нет определения для любого

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

IEnumerable добавляется в моем контроллере перед возвратом вида, как показано ниже:

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

Обычно я мел это до отсутствует ссылка на Linq, но Linq включается в файл 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 отлично работают в других представлениях, но это единственное представление дает мне проблему.

Что еще могло вызвать это исключение?

ответ

2

Свойства ViewBag: dynamic, и вы не можете вызвать методы расширения таким образом.

Вы можете явно привести к вашему типу, чтобы сделать это возможным:

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

Смотрите Extension method and dynamic object для получения дополнительной информации.

+0

@JNYRanger связанный q содержит подробные объяснения, методы коротких расширений - это метод * не * объекта - поэтому одного типа времени выполнения недостаточно, чтобы найти их. –

+0

Да, я начал читать и удалял свой комментарий. Спасибо за информацию! – JNYRanger