MVC到MVC2错误

时间:2010-03-01 11:07:33

标签: c# asp.net-mvc asp.net-mvc-2

我刚刚更新到VS2010(rc),随后被迫更新我的项目并转换为MVC2(ta 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我有点抛出。任何人吗?

我目前有(包括)

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在现有的ASP.NET 3.5 SP1运行时之上提供了一个新的模型 - 视图 - 控制器(MVC)框架。)

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

当代码是在VS2008中为MVC(1)编写的时,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;
                            }
                        }
                    }

如果不是一个丑陋的代码;遗产代码非常有趣

1 个答案:

答案 0 :(得分:4)

IValueProvider未扩展IEnumerable<T>,因此Where等LINQ扩展方法将无法使用。

IValueProvider是MVC 2中的新功能,因此您可能正在访问MVC 1中IEnumerable<T>的属性。

您能提供NewDiscountsController.cs 51的代码吗?