Мне нужно отфильтровать некоторые значения, прежде чем они будут связаны с данными POST в MVC2. К сожалению, я не могу изменить код на стороне клиента, который иногда передает «N / A» для значения формы, которое должно быть отображено в десятичную? тип. Что должно произойти, это если N / A - это значение POST, очищающее его перед тем, как оно будет привязано / проверено.
Я все утро пытался заставить его работать, используя ModelBinder, который расширяет DefaultModelBinder:
public class DecimalFilterBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.PropertyType == typeof(decimal?))
{
var model = bindingContext.Model;
PropertyInfo property = model.GetType().GetProperty(propertyDescriptor.Name);
var httpRequest = controllerContext.RequestContext.HttpContext.Request;
if (httpRequest.Form[propertyDescriptor.Name] == "-" ||
httpRequest.Form[propertyDescriptor.Name] == "N/A")
{
property.SetValue(model, null, null);
}
else
{
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
else
{
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
}
Проблема в том, что я не знаю, как получить доступ к первоначально опубликованному значению, когда оно находится в списке. Я не могу просто набрать Form[propertyDescriptor.Name]
, потому что он содержится в элементе списка в форме (например, на самом деле ввод Values[0].Property1
). У меня связыватель модели подключен в global.asax и работает нормально, я просто не знаю, как получить исходное значение формы, чтобы отфильтровать его в пустую строку, прежде чем произойдет связывание по умолчанию.