Ошибки MVC to MVC2 - PullRequest
       14

Ошибки MVC to MVC2

2 голосов
/ 01 марта 2010

Я только что обновился до VS2010 (rc) и впоследствии был вынужден обновить мои проекты и преобразовать их в MVC2 (т.е. Microsoft) ..., который уничтожил первое приложение, которого коснулся.

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 я немного брошен. Кто-нибудь? * * 1004

У меня есть (в комплекте)

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 он бросает шипение при использовании где, хотя это, видимо, хорошо.

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

Если не безобразный кусок кода; Legacy Code - это очень весело

1 Ответ

4 голосов
/ 01 марта 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...