【问题标题】:Disable validation on certain fields禁用某些字段的验证
【发布时间】:2010-03-25 21:32:15
【问题描述】:

我有一个 ViewModel 用于添加具有以下属性的用户:电子邮件、密码、ConfirmPassword 以及所有属性的必需属性。编辑用户时,我希望不需要 Password 和 ConfirmPassword 属性。

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

【问题讨论】:

    标签: asp.net-mvc validation


    【解决方案1】:

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

    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】:

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

      下面是我为这里的人准备的一个简单的演示。您需要进行修改以适合您的目的/

          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
      

      【讨论】:

      • 问题是我希望该字段在一个控制器动作中是必需的,而不是在另一个控制器动作中,有没有办法让自定义属性知道它当前在哪个动作中?跨度>
      • 是的,你需要用谷歌搜索它,因为我现在想不出来。这可能会对您有所帮助。 stackoverflow.com/questions/1212429/…
      猜你喜欢
      • 1970-01-01
      • 2018-04-19
      • 2014-11-23
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多