none
MVC模型验证问题 RRS feed

  • 问题

  • [Range(typeof(DateTime), "2000/1/1", "2010/1/1")]
    
    public DateTime OrderDate { get; set; }

    给这个属性加上一个验证,但一直不通过,请问是写的有问题,还是不能这样验证?
    2011年8月15日 10:17

答案

  • Range似乎是限定数值范围

    刚刚找了一下资料,这问题跟楼主的很像

    http://stackoverflow.com/questions/2334293/dynamic-range-validation-in-asp-net-mvc-2

    所以代码改写一下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
    
    
    
    namespace MvcApplication1.Models
    {
    
     public class yourForm
    
     {
    
      [CustomValidation(typeof(MvcApplication1.Models.yourForm), "ValidateDate")] 
    
      public DateTime OrderDate { get; set; }
    
    
    
      public static ValidationResult ValidateDate(DateTime deliveryDateToValidate) 
    
      {
    
       if (deliveryDateToValidate.Date >= new DateTime(2000, 1, 1) && deliveryDateToValidate.Date <= new DateTime(2010, 1, 1))
    
       {
    
        return ValidationResult.Success;
    
       }
    
       else
    
       {
    
        return new ValidationResult("Date must be between 2000/1/1 And 2010/1/1");
    
       
    
       }
    
       
    
      } 
    
     }
    
    }
    
    

    这样应该就可以了

     =====================

    更正一下

    应该用不着CustomValidation,楼主的代码我Run了一遍是正常的,会不会是您的Controller还是View的部份哪里写错?


    Shadowと愉快なコード達

    • 已标记为答案 Shiller_ 2011年8月16日 0:36
    2011年8月15日 10:52

全部回复

  • Range似乎是限定数值范围

    刚刚找了一下资料,这问题跟楼主的很像

    http://stackoverflow.com/questions/2334293/dynamic-range-validation-in-asp-net-mvc-2

    所以代码改写一下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
    
    
    
    namespace MvcApplication1.Models
    {
    
     public class yourForm
    
     {
    
      [CustomValidation(typeof(MvcApplication1.Models.yourForm), "ValidateDate")] 
    
      public DateTime OrderDate { get; set; }
    
    
    
      public static ValidationResult ValidateDate(DateTime deliveryDateToValidate) 
    
      {
    
       if (deliveryDateToValidate.Date >= new DateTime(2000, 1, 1) && deliveryDateToValidate.Date <= new DateTime(2010, 1, 1))
    
       {
    
        return ValidationResult.Success;
    
       }
    
       else
    
       {
    
        return new ValidationResult("Date must be between 2000/1/1 And 2010/1/1");
    
       
    
       }
    
       
    
      } 
    
     }
    
    }
    
    

    这样应该就可以了

     =====================

    更正一下

    应该用不着CustomValidation,楼主的代码我Run了一遍是正常的,会不会是您的Controller还是View的部份哪里写错?


    Shadowと愉快なコード達

    • 已标记为答案 Shiller_ 2011年8月16日 0:36
    2011年8月15日 10:52
  • Range好像确实只能验证数值范围。

    最后我采用继承ValidationAttribute并实现IClientValidatable接口来解决了双向验证的问题。

    2011年8月16日 0:35