【发布时间】:2012-10-09 13:52:27
【问题描述】:
我有一些通用验证,我希望将毯子应用于每个模型上的每个字符串属性。我正在考虑继承 DefaultModelBinder 并通过覆盖 BindProperty 方法来添加逻辑。这样做合适吗?
【问题讨论】:
标签: c# asp.net-mvc-3 validation
我有一些通用验证,我希望将毯子应用于每个模型上的每个字符串属性。我正在考虑继承 DefaultModelBinder 并通过覆盖 BindProperty 方法来添加逻辑。这样做合适吗?
【问题讨论】:
标签: c# asp.net-mvc-3 validation
string类型
ModelState
public class MyCustomModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
foreach (var propertyInfo in typeof(bindingContext.Model.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance))
{
if (propertyInfo.PropertyType == typeof(string))
{
var value = propertyInfo.GetValue(bindingContext.Model);
// validate
// append to ModelState if validation failed
bindingContext.ModelState.AddModelError(propertyInfo.Name, "Validation Failed");
}
}
}
}
public ActionResult MyActionMethod([ModelBinder(typeof(MyCustomModelBinder ))] ModelType model)
{
// ModelState.IsValid is false if validation fails
}
【讨论】:
子类化 DefaultModelBinder 并覆盖 BindProperty 对我来说效果很好。调用 base.BindProperty 可确保模型的属性已设置,然后我可以对其进行评估以进行全局验证。
【讨论】: