Я пытаюсь обновить свой проект MVC 1 до MVC 2 RC. У нас в настоящее время есть пользовательский modelbinder, который добавляет объекты к ValueProvider (это работало, когда это был словарь). Мы затем выдали это к значению по умолчанию modelbinder. Однако IValueProvider не имеет добавить метода, таким образом, этот алгоритм больше не работает. Кто-либо знает о пути к добавленным стоимостям к ValueProvider в MVC 2?
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 в этот момент.
Для того, чтобы обеспечить пользовательское значениеProvider, вам необходимо переопределить ControllightingInvoker, который является окончательным решением. К сожалению, контроллерныйInvoker создается объектом контроллера вместо того, чтобы вводиться. Следовательно, вам также необходимо переопределить контроллер, чтобы позвонить своему собственному контроллеру.
Я, вероятно, не ошибаюсь, но какой этот префикс вы используете? Это связано с ребенком соотношения вашей модели?
Если нет, почему не вытесняется из по умолчанию Modelbinder
и переопределить метод BindModel ()
? Таким образом, вы можете позвонить base.bindmodel ()
и манипулируйте значениями после этого, однако вы не можете использовать проверку модели, затем (убедитесь, что вы прочитали http://bradwilson.typepad.com/ Blog / 2010/01 / вход-валидация-VS-модель-валидация-in-aspnet-mvc.html , потому что будет существенное изменение в выпуске против RC).
Чистый подход, от того, что я могу догадаться, вы пытаетесь сделать, это использовать ViewModel в этом случае. Поскольку манипуляция, вероятно, нетривиальна, вы можете отделить входную и модульную проверку друг от друга.
Не уверен, что это также поможет ...
Разве вы не можете использовать один из полученных типов IvalueProvider ? (Или даже создайте свои собственные, но в рамках в рамках в рамках)
ValueProvidricsionary . ValueProvidercleclolection , , Форма (и еще пару) Все они реализуют IvalueProvider .
Я не уверен, поможет ли это. Я не совсем уверен в том, что вы пытаетесь сделать. Мне не нужно было иметь дело с смешиванием с парами поста.