Asp.net-Mvc

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

  • August 20, 2010

我正在嘗試將我的 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);
}

問題是當你到達 ModelBinder 時,你的 ValueProvider 已經設置好了。以前,您可以在此時向您的 ValueProvider 添加值。

為了提供一個自定義的ValueProvider,你需要重寫ControllerActionInvoker,這是最終的解決方案。不幸的是,ControllerActionInvoker 是由 Controller 對象創建的,而不是被注入的。因此,您還需要重寫 Controller 來呼叫自己的 ControllerActionInvoker。

你不能使用IValueProvider的派生類型之一嗎?(甚至創建自己的,但框架中似乎有不錯的實現)

值提供者字典ValueProviderCollectionFormCollection(以及更多)它們都實現了IValueProvider

我不確定它是否有幫助。我不完全確定您要做什麼。我不必處理那麼多與 post 參數混合的問題。

引用自:https://stackoverflow.com/questions/1958972