asp.net-mvc-3 – ASP.NET MVC 3:在需要模型外部的信息时验证模型
|
为了进行验证,需要在模型外部进行信息验证模型的好方法是什么?例如,考虑以下模型: public class Rating {
public string Comment { get; set; }
public int RatingLevel { get; set; }
}
然后,系统管理员可以设置需要注释的RatingLevels.这些设置可通过设置服务获得. 所以,为了完全验证模型,我需要外部的信息,在这种情况下是设置服务. 到目前为止,我已经考虑过以下几点: >将服务注入模型. DefaultModelBinder使用System.Activator创建对象,因此它不会通过正常的依赖关系解析器,并且我不能将服务注入到模型中,而不创建新的模型绑定(除此之外,这并不是正确的方式去吧) 哪种方法,以上或不是,最适合这种类型的验证问题? 解决方法选项1不合适.它唯一的工作方式是通过服务定位器反模式拉入依赖关系.选项2不起作用虽然由于C#属性要求,我看不出这是怎么可能的,但这是可能的.参见以下内容: > Resolving IoC Container Services for Validation Attributes in ASP.NET MVC 选项3:我以前不了解,但似乎是一个非常强大的写验证器的方法是使用ModelValidator类和相应的ModelValidatorProvider. 首先,您创建自定义的ModelValidatorProvider: public class CustomModelValidatorProvider : ModelValidatorProvider
{
public CustomModelValidatorProvider(/* Your dependencies */) {}
public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata,ControllerContext context)
{
if (metadata.ModelType == typeof(YourModel))
{
yield return new YourModelValidator(...);
}
}
}
ASP.NET MVC的IDependencyResolver将尝试解决上述提供程序,因此只要在您的IoC容器中注册,您就不需要执行任何其他操作.然后ModelValidator: public class EntryRatingViewModelValidatorMvcAdapter : ModelValidator
{
public EntryRatingViewModelValidatorMvcAdapter(
ModelMetadata argMetadata,ControllerContext argContext)
: base(argMetadata,argContext)
{
_validator = validator;
}
public override IEnumerable<ModelValidationResult> Validate(object container)
{
if (/* error condition */)
{
yield return new ModelValidationResult
{
MemberName = "Model.Member",Message = "Rating is required."
};
}
}
}
由于通过IDependencyResolver检索提供程序,并且提供程序完全控制了返回的ModelValidators,因此我很容易地注入依赖项并执行必要的验证. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 当模型中存在一对多关系时,MVC“创建视图
- asp.net-core – 当前的运行时目标框架与项目不兼容
- asp.net – 使用itemtemplate动态地将列添加到Grid-view
- asp.net – FormsAuthentication.SetAuthCookie()是否创建一
- 从ASP.NET应用程序写入IIS日志
- asp.net-mvc – 禁用客户端缓存
- asp.net-mvc – 如何将ViewData传递给HandleError视图?
- asp.net-mvc – 使用jQuery getJson发送list/array作为参数
- asp.net – 如何直接在.aspx页面中访问web.config设置?
- Asp.net Razor,语法错误 – onclick事件参数
