DefaultModelBinder 实现不会填充模型 - ASP.NET MVC 2
我有一个非常简单的 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>
每个字段都与模型的一个属性匹配。
I have a very simple implementation of the DefaultModelBinder, I need it to fire some custom validation.
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 is a public sealed class.
The model binder is registered in the Global.asax this way:
ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder());
The problem is that the model is never populated! But the MVC default model binder (I remove the registration in global.asax) works fine.
This is the view 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>
Every field matches a property of the model.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据您提供的信息,我无法重现该问题。这就是我所做的。
视图模型:
控制器:
索引视图:
模型绑定器:
所以现在的问题是,您的代码与我的代码有何不同?这些
CustomValidation
和Validate
方法中的内容是什么?From the information you provided I am unable to reproduce the problem. Here's what I did.
View model:
Controller:
Index View:
Model binder:
So now the question is, how does your code differs than mine and what is it in those
CustomValidation
andValidate
methods?