我试图将我的MVC 1项目升级到MVC 2 RC。当前,我们有一个自定义modelbinder,可将项目添加到ValueProvider中(当它是字典时可以使用)。然后,我们将此传递给默认的modelbinder。但是,IValueProvider没有add方法,因此该算法不再起作用。有谁知道在MVC 2中将值添加到ValueProvider的方法吗?
foreach(string valKey in controllerContext.RequestContext.HttpContext.Request.Form.AllKeys.Where(x => x.StartsWith(valuesToChangePrefix)))
{
string valName = valKey.Substring(valuesToChangePrefix.Length);
string myVal = ManipulateValue(bindingContext.ValueProvider.GetValue(valKey).AttemptedValue);
// This is where I need to add to my value Provider (As you can see I used to just assign a ValueProviderResult
//bindingContext.ValueProvider = new ValueProviderResult(myVal.Split(','), myVal, bindingContext.ValueProvider.GetValue(valKey).Culture);
}
最佳答案
问题在于,当您到达ModelBinder时,已经设置了ValueProvider。以前,您可以在此时将值添加到ValueProvider中。
为了提供一个Custom ValueProvider,您需要重写ControllerActionInvoker,这是最终的解决方案。不幸的是,ControllerActionInvoker是由Controller对象创建的,而不是被注入(inject)的。因此,您还需要重写Controller才能调用自己的ControllerActionInvoker。