日期:2010-01-25 浏览次数:20623 次
昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^
原文地址:http://www.youguanbumen.net/Article.aspx?id=79
原文:
前两天写了个文章ASP.NET MVC 3 —— Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见的注册用户时验证用户名是否存在的例子,最后成功地对用户名实现了用ajax加薪校验的功能。给出Model的代码如下:
- /// <summary>
- /// 用户添加操作的模型
- /// </summary>
- publicclassMyUser_AddModel
- {
- #region MyRegion
- /// <summary>
- /// 用户名
- /// </summary>
- [DisplayName("登录账号")]
- [Required(ErrorMessage = "用户账号不能为空")]
- [Remote("CheckUserAccountExists", "Test", ErrorMessage = "用户账号已存在")]
- // 远程验证(Ajax)
- publicstringUserAccount { get; set; }
- }
文章发到博客园上面之后有朋友提出一了一点:“这个我们可以认为在创建的时候解决重复问题,但是如果是Update的话,我相信这样的语句应该也会报错误的”。就是说如果这个Model用于做Update操作的时候,校验用户名是否存在的方法和Add操作会有点不同,因为要把自己排除在外,例如原来的用户名叫”user1“修改后还叫”user1“,这时候判断用户名是否存在的标准是”如果存在用户名是‘user1’的并且用户ID号不是当前这个要修改的用户,那么用户不可用(存在)“,而Add操作的时候不存在”自己“,所以我看可以理解为两个操作都需要判断用户名是否存在,但是使用了不同的策略!
刚好之前看了ASP.NET MVC 3自带的Demo(就是创建MVC3.0项目后生成的那个- -!),想写一下我自己认为的”微软希望我们怎么去设计MVC中的Model”的看法,发现似乎和这个问题有点联系,以下是我个人的观点:
首先我们看下Demo项目中Models目录下的AccountModels.cs,下面的代码摘自这个文件中的两个我认为很有代表性的类,都是和用户有关的,源代码如下:
- publicclassLogOnModel
- {
- [Required]
- [Display(Name = "User name")]
- publicstringUserName { get; set; }
- [Required]
- [DataType(DataType.Password)]
- [Display(Name = "Password")]
- publicstringPassword { get; set; }
- &n