如何解决如何在ASP.NET MVC 3中的模型上查找失败的验证器类型?
| 我在模型类的某些属性上有一些标准的验证器属性。 HTML表单被发布到我的控制器,我可以检查“ 0”以查看它是否有效以及哪些属性无效。一切都很好。 (我没有进行任何客户端验证。) 但是,有时候,如果唯一未通过验证的属性是带有ѭ1的属性,我希望将模型视为有效。 我可以使用Reflection检查每个未通过验证的属性,并查看每个属性的自定义属性中是否有ѭ1,但这似乎有点繁重。我不知道有什么API可以告诉我失败的验证器的类型吗?解决方法
好吧,一个疯狂的要求就需要一个疯狂的解决方案!在我的控制器中,我正在使用
if(this.ModelState.IsValid)...
,但现在我可以使用
if(ValidatorChecker<ModelType>.IsModelStateValid(this.ModelState))...
,
具有以下内容:
internal static class ValidatorChecker<TModel>
{
public static bool IsModelStateValid(ModelStateDictionary modelState)
{
if (modelState.IsValid)
{
return true;
}
int totalErrors = 0,requiredAttributeErrors = 0;
Type modelType = typeof(TModel);
foreach (var key in modelState.Keys)
{
if (modelState[key].Errors.Count > 0)
{
totalErrors += modelState[key].Errors.Count;
Type currentType = modelType;
string[] typeParts = key.Split(
new char[] { \'.\' },StringSplitOptions.RemoveEmptyEntries);
int typeIndex = 0;
if (typeParts.Length == 0)
{
continue;
}
else if (typeParts.Length > 1)
{
for (typeIndex = 0; typeIndex < typeParts.Length - 1; typeIndex++)
{
currentType =
currentType.GetProperty(typeParts[typeIndex]).PropertyType;
}
}
PropertyInfo validatedProperty =
currentType.GetProperty(typeParts[typeIndex]);
var requiredValidators =
validatedProperty.GetCustomAttributes(typeof(RequiredAttribute),true);
requiredAttributeErrors += requiredValidators.Length;
}
}
return requiredAttributeErrors == totalErrors;
}
}
,验证是模型绑定程序的一部分,它从http请求中提取表单集合并应用验证属性。我建议构造一个验证属性,以实现所需的验证。目前正在执行的验证几乎没有意义,因为它不会告诉您哪个字段无效。
在许多请求上多次执行此反射的速度也有影响,这可能是ssssslllllllooooowwwwwww !!!!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。