2010-03-01 2 views
2

Я только что обновился до VS2010 (rc), а затем был вынужден обновить мои проекты и преобразовать в MVC2 (ta microsoft) ..., в котором первое приложение было затронуто.Ошибки MVC для MVC2

Error 2 'System.Web.Mvc.IValueProvider' does not contain a definition for 
'Where' and no extension method 'Where' accepting a first argument of type 
'System.Web.Mvc.IValueProvider' could be found (are you missing a using directive or an 
assembly reference?) ~\Controllers\DiscountsController.cs 51 39 ODSe 

Учитывая, что я знаю, что это работает в VS2008 - MVC1. Меня бросают. Кто угодно?

я в настоящее время (в комплекте)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 
using ODSe.Models; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Net.Mail; 

не должны должны быть .net 4, как первоначальный проект был 3,5; и MVC2 является .net 3.5 (ASP.NET MVC 2 RC 2 обеспечивает новый Model-View-Controller (MVC) рамки поверх существующих ASP.NET 3.5 SP1 выполнения.)

Код Около 51

foreach (var x in this.ValueProvider.Where(k => k.Key.StartsWith("discount."))) 
{ 
    if (String.IsNullOrEmpty(x.Value.AttemptedValue)) 
    { 
    ModelState.SetModelValue(x.Key, new ValueProviderResult(ValueProvider[x.Key].AttemptedValue, collection[x.Key], System.Globalization.CultureInfo.CurrentCulture)); 
         Discount = true; 
    } 
} 

Когда код был написан для MVC (1) в VS2008 this.ValueProvider был «IDictionary ControllerBase.ValueProvider. в MVC (2) VS2010 он бросает hissy подгонку об использовании, где хотя это, очевидно, прекрасно .

foreach (var x in this.ValueProvider) 
        { 
         if (x.Key.StartsWith("discount.")) 
         { 
          if (String.IsNullOrEmpty(x.Value.AttemptedValue)) 
          { 
           ModelState.SetModelValue(x.Key, new ValueProviderResult(ValueProvider[x.Key].AttemptedValue, collection[x.Key], System.Globalization.CultureInfo.CurrentCulture)); 
           Discount = true; 
          } 
         } 
        } 

Если нет приклада уродливого куска кода; Устаревший код очень полезен

ответ

4

IValueProvider не распространяется IEnumerable<T>, поэтому методы расширения LINQ, такие как Where, будут недоступны.

IValueProvider нового в MVC 2, поэтому вполне возможно, что вы обращаетесь к собственности, которая была IEnumerable<T> в MVC 1.

Можете ли вы предоставить код на NewDiscountsController.cs 51?

+0

Я думаю, ваше право; Я бросил код вверху. –