ASP.NET MVC 2 - 在IValueProvider上设置值

Kei*_*eau 9 asp.net-mvc modelbinders asp.net-mvc-2

我正在尝试将我的MVC 1项目升级到MVC 2 RC.我们目前有一个自定义模型绑定器,它将项目添加到ValueProvider(这在字典时起作用).然后我们将其传递给默认的模型绑定器.但是,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);
}
Run Code Online (Sandbox Code Playgroud)

Kei*_*eau 2

问题是,当您到达 ModelBinder 时,您的 ValueProvider 已经设置完毕。以前,您可以在此时向 ValueProvider 添加值。

为了提供自定义ValueProvider,您需要重写ControllerActionInvoker,这是最终的解决方案。不幸的是,ControllerActionInvoker 是由 Controller 对象创建的,而不是被注入的。因此,你还需要重写Controller来调用你自己的ControllerActionInvoker。

  • 看起来实际上有一个更简单的解决方案。您可以简单地创建自己的 ValueProvider 并将其添加到 Application_Start 中的静态 ValueProviderFactories.Factories 集合中。 (2认同)