我刚刚更新到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;
}
}
}
如果不是一个丑陋的代码;遗产代码非常有趣
答案 0 :(得分:4)
IValueProvider
未扩展IEnumerable<T>
,因此Where
等LINQ扩展方法将无法使用。
IValueProvider
是MVC 2中的新功能,因此您可能正在访问MVC 1中IEnumerable<T>
的属性。
您能提供NewDiscountsController.cs 51
的代码吗?