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 – Windows EventLog不能超过32766个字符
- asp.net – 电子邮件CSS
- asp.net-mvc – 类型“表达式<>”在未引用的程序集中定义
- asp.net-mvc – 如何使用Data Annotations Extensions在属性
- asp.net-mvc-3 – 找不到ASP.NET MVC 3 HttpPost操作方法
- asp.net-mvc-2 – 强大类型的ActionLink在Asp.Net MVC 2?
- asp.net-mvc – 从MVC剃刀模型调用Bootstrap 3 Modal?
- asp.net-mvc – 在DropDownList中验证所需的选择
- .net – 每个堆栈跟踪线末尾的标志是什么?
- asp.net-mvc – 依赖注入框架的重点是什么?
- asp.net-mvc – 为什么ASP.Net MVC(或CodeIgnite
- asp.net-mvc – 如何使用FluentValidation在Clie
- asp.net-mvc-3 – Asp.Net MVC 3 – @ Html.Acti
- asp.net-mvc-5 – 同一域中的Web API 2项目和MVC
- asp.net-mvc – “添加ASP.Net文件夹”未启用
- asp.net-mvc – 在MVC控制器中复制代码
- asp.net-mvc – ASP.NET MVC:post-redirect-get
- asp.net – 实体框架MVC慢页面加载
- asp.net-mvc – Redirect和RedirectToAction之间
- asp.net-mvc-2 – 动态生成的模型中的ASP.NET MV