代码之家  ›  专栏  ›  技术社区  ›  adriaanp

对某些字段禁用验证

  •  4
  • adriaanp  · 技术社区  · 16 年前

    我有一个ViewModel来添加一个具有属性的用户:Email、Password、ConfirmPassword,所有属性上都有必需的属性。在编辑用户时,我希望不需要Password和ConfirmPassword属性。

    有没有办法在不同的控制器操作中禁用对某些属性的验证,或者最好创建一个单独的EditViewModel?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Kelsey    16 年前

    我喜欢将其分解,并为每个视图创建一个包含所有公共数据和层次的基本模型:

    class UserBaseModel
    {
        int ID { get; set; }
    
        [Required]
        string Name { get; set; }       
    
        [Required]
        string Email { get; set; }               
        // etc...
    }
    
    class UserNewModel : UserBaseModel
    {
        [Required]
        string Password { get; set; }
    
        [Required]
        string ConfirmPassword { get; set; }
    }
    
    class UserEditModel : UserBaseModel
    {
        string Password { get; set; }
        string ConfirmPassword { get; set; }
    }
    

    有兴趣知道是否有更好的方法,以及虽然这种方式似乎很干净灵活。

        2
  •  0
  •   griegs    16 年前

    您可以编写一个自定义属性来测试条件,允许或不允许空字段。

    下面是一个简单的演示我放在这里的家伙。你需要修改以适应你的目的/

        using System.ComponentModel.DataAnnotations;
    
        namespace CustomAttributes
    
        {
    
        [System.AttributeUsage(System.AttributeTargets.Property)]
    
        public class MinimumLength : ValidationAttribute
    
        {
            public int Length { get; set; }
            public MinimumLength()
            {
            }
    
            public override bool IsValid(object obj)
            {
                string value = (string)obj;
                if (string.IsNullOrEmpty(value)) return false;
                if (value.Length < this.Length)
                    return false;
                else
                    return true;
            }
        }
    }
    

    模型;

    using CustomAttributes;
    
    namespace Models
    {
        public class Application
        {
            [MinimumLength(Length=20)]
            public string name { get; set; }
        }
    }
    

     [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(Application b)
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
    
        if (ModelState.IsValid)
        {
            return RedirectToAction("MyOtherAction");
        }
        return View(b);
    }
    
    enter code here