У меня очень простая реализация DefaultModelBinder, мне нужно, чтобы он запускал какую-то пользовательскую проверку.
public class MyViewModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ModelStateDictionary modelState = bindingContext.ModelState;
var model = (MyViewModel)base.BindModel(controllerContext, bindingContext);
var result = ValidationFactory.ForObject<MyViewModel>().Validate(model);
CustomValidation(result, modelState);
return model;
}
}
MyViewModel - это открытый закрытый класс.Связыватель модели регистрируется в Global.asax следующим образом:
ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder());
Проблема в том, что модель никогда не заполняется!Но механизм связывания модели MVC по умолчанию (я удаляю регистрацию в global.asax) работает нормально.
Это представление HTML:
<table>
<tr>
<td><label for="Name">Name</label></td>
<td><input id="Name" name="Name" type="text" value="" /></td>
</tr>
<tr>
<td><label for="Code">Code</label></td>
<td><input id="Code" name="Code" type="text" value="" /></td>
</tr>
</table> </div>
Каждое поле соответствует свойству модели.