2010-03-01 4 views
2

Je viens de mettre à jour VS2010 (rc) et ensuite été forcé de mettre à jour mes projets et de convertir en MVC2 (ta microsoft) ... qui a saboté la première application touchée.Erreurs 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 

Considérant que je sais que cela fonctionne dans VS2008 - MVC1 je suis un peu lancé. N'importe qui?

J'ai actuellement (inclus)

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; 

Shouldnt doivent être .net 4 que le projet initial était de 3,5; et MVC2 est .net 3.5 (ASP.NET MVC 2 RC 2 offre un nouveau cadre de Model-View-Controller (MVC) au-dessus de l'ASP.NET existante 3.5 Runtime SP1.)

code Environ 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; 
    } 
} 

Lorsque le code a été écrit pour MVC (1) dans VS2008 this.ValueProvider était « IDictionary ControllerBase.ValueProvider. dans MVC (2) VS2010 il jette un ajustement sifflants sur l'utilisation où que c'est apparemment bien

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

Si ce n'est pas un bout de code laid; Code Legacy est très amusant

Répondre

4

IValueProvider ne s'étend pas IEnumerable<T>, si les méthodes d'extension LINQ comme Where ne seront pas disponibles.

IValueProvider est nouveau dans MVC 2, il est donc possible que vous accédez à une propriété qui a été IEnumerable<T> dans MVC 1.

Pouvez-vous fournir le code à NewDiscountsController.cs 51?

+0

Je pense que c'est votre droit; J'ai jeté le code en haut. –