日期:2010-01-25  浏览次数:20590 次

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^

原文地址:http://www.youguanbumen.net/Article.aspx?id=79

原文:

前两天写了个文章ASP.NET MVC 3 —— Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见的注册用户时验证用户名是否存在的例子,最后成功地对用户名实现了用ajax加薪校验的功能。给出Model的代码如下:

  1. /// <summary>  
  2. /// 用户添加操作的模型  
  3. /// </summary>  
  4. publicclassMyUser_AddModel  
  5. {  
  6.     #region MyRegion  
  7.     /// <summary>  
  8.     /// 用户名  
  9.     /// </summary>  
  10.     [DisplayName("登录账号")]  
  11.     [Required(ErrorMessage = "用户账号不能为空")]  
  12.     [Remote("CheckUserAccountExists""Test", ErrorMessage = "用户账号已存在")] 
  13. // 远程验证(Ajax)  
  14.     publicstringUserAccount { getset; }  
  15. }   
  16.  
  17.       
  18.  

文章发到博客园上面之后有朋友提出一了一点:“这个我们可以认为在创建的时候解决重复问题,但是如果是Update的话,我相信这样的语句应该也会报错误的”。就是说如果这个Model用于做Update操作的时候,校验用户名是否存在的方法和Add操作会有点不同,因为要把自己排除在外,例如原来的用户名叫”user1“修改后还叫”user1“,这时候判断用户名是否存在的标准是”如果存在用户名是‘user1’的并且用户ID号不是当前这个要修改的用户,那么用户不可用(存在)“,而Add操作的时候不存在”自己“,所以我看可以理解为两个操作都需要判断用户名是否存在,但是使用了不同的策略!

刚好之前看了ASP.NET MVC 3自带的Demo(就是创建MVC3.0项目后生成的那个- -!),想写一下我自己认为的”微软希望我们怎么去设计MVC中的Model”的看法,发现似乎和这个问题有点联系,以下是我个人的观点:

首先我们看下Demo项目中Models目录下的AccountModels.cs,下面的代码摘自这个文件中的两个我认为很有代表性的类,都是和用户有关的,源代码如下:

  1. publicclassLogOnModel  
  2. {  
  3.     [Required]  
  4.     [Display(Name = "User name")]  
  5.     publicstringUserName { getset; }  
  6.     [Required]  
  7.     [DataType(DataType.Password)]  
  8.     [Display(Name = "Password")]  
  9.     publicstringPassword { getset; }  
  10.    &n