c# – DataValidation Model / ViewModel / Entity Framework Code First
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – DataValidation Model / ViewModel / Entity Framework Code First,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2523字,纯文字阅读大概需要4分钟。
内容图文
![c# – DataValidation Model / ViewModel / Entity Framework Code First](/upload/InfoBanner/zyjiaocheng/784/f964f5a0a71149dea4d06ee60afdc453.jpg)
我正在设计一个包含ASP.NET MVC 4(Beta),VS 11(Beta),EF 5(Beta)的新网站,但这个问题也适用于ASP.NET MVC 3,VS 2010,EF 4的发布版本.
第一步:我正在使用Entity Framework Code First方法,例如,我有以下用户模型:
public class User
{
[Key]
public int UserId {get;set;}
public String LoginName { get; set; }
public String Password { get; set; }
}
现在,为了注册我需要另一个模型,注册模型:
public class Registration
{
public String LoginName { get; set; }
public String Password { get; set; }
public String PasswordConfirm { get; set; }
}
这是我的问题开始的地方:我应该在哪里放置我的DataValidation注释?例如,密码长度至少为10个字符,PasswordConfirmed必须与密码匹配,依此类推.我是否必须在每个可以使用密码做某事的模型上写这个(我也考虑使用ChangePassword模型)
另一件事是如何处理控制器.当我显示我的注册ViewModel并且一切正常时,我是否创建用户模型并将注册ViewModel中的变量分配给它?
有时我会有很多属性转到数据库,但没有显示给用户(外键,计算值等).
作为DRY的思考,我不想重复我的自我.
这个的最佳做法是什么?
需要明确的是:注释不是必需的.如果有更好的验证方法,如果你展示它们,我会很高兴.
解决方法:
我不能客观地说哪个是“最佳实践”,但这就是我的看法.
如果要绑定到视图模型,请验证视图模型,以便:
public class Registration
{
public String LoginName { get; set; }
[Required]
[StringLength(50, MinimumLength=10)]
public String Password { get; set; }
[Required]
[StringLength(50, MinimumLength=10)]
public String PasswordConfirm { get; set; }
}
您可以在控制器中“手动”进行验证,如果密码和确认匹配则检查POST,如果没有向ModelState添加条目(但可能导致代码重复并且有点麻烦)或者使用不错的IValidatableObject模型上的界面:
public class Registration : IValidatableObject
{
public String LoginName { get; set; }
[Required]
[StringLength(50, MinimumLength=10)]
public String Password { get; set; }
[Required]
[StringLength(50, MinimumLength=10)]
public String PasswordConfirm { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext context)
{
if(Password != PasswordConfirm)
yield return new ValidationResult("Confirmation doesn't match", new[] {"PasswordConfirm"})
//etc.
}
}
现在,当您在POST之后绑定模型时,只需调用ModelState.IsValid即可完成验证,如果它无效,则返回错误列表 – 包括您的自定义错误.
当然,你现在可以将DataAnnotations放在DB模型上作为一个额外的措施,只是为了“以防万一”,以避免字符串截断异常等,如果你以某种方式忘记并试图将更长的字符串推送到数据库
至于映射,是的,在验证模型后,在POST操作结束时,通常将属性从模型映射到新的User实例(添加到DB时)或现有的实例更新.您可以使用反射来使用AutoMapper或自己写一个天真的映射器 – 这是一个相对容易的任务,但最好将其作为一个独立的练习,重新发明轮子是没有意义的.
内容总结
以上是互联网集市为您收集整理的c# – DataValidation Model / ViewModel / Entity Framework Code First全部内容,希望文章能够帮你解决c# – DataValidation Model / ViewModel / Entity Framework Code First所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。