Search code examples
c#asp.netasp.net-mvcasp.net-mvc-3modelmetadata

Is it possible to override the required attribute on a property in a model?


I'm curious to find out if it is possible to override the [Required] attribute that has been set on a model. I'm sure there most be a simple solution to this problem, any takers?


Solution

  • Depends on what precisely you are doing. If you are working with a subclass, using the model with the Required attribute as the base, you can do this:

    Redefine the property with the new keyword, rather than override it.

    public class BaseModel
    {
        [Required]
        public string RequiredProperty { get; set; }
    }
    
    
    public class DerivativeModel : BaseModel
    {
        new public string RequiredProperty { get; set; }
    
    }
    

    If you simply want to bind or validate a model, but skip the Required property in your controller, you can do something like:

    public ActionResult SomeAction()
    {
         var model = new BaseModel();
    
         if (TryUpdateModel(model, null, null, new[] { "RequiredProperty" })) // fourth parameter is an array of properties (by name) that are excluded
         {
              // updated and validated correctly!
              return View(model);
         }
         // failed validation
         return View(model);
    }