J'ai un modèle de vue avec un "champ" qui est obligatoire.
public ActionResult Create() { var model = new MyViewModel(); if(something){ model.SomeThingToRemoveTheRequiredFromCode(); } return View(model); }
Et dans l'un de mes contrôleurs, je renvoie ce modèle de vue. Mais, en fonction de certains paramètres, je veux supprimer le requis.
public class MyViewModel { [Required(ErrorMessageResourceType = typeof(Global), ErrorMessageResourceName = "Required")] public string Code { get; set; } }
Comment puis-je supprimer le requis du modèle de vue dans la situation où je viens de créer le modèle de vue?
3 Réponses :
Voici une approche. Créez un nouveau modèle sans l'attribut Required
public ActionResult Create() { var model = new MyViewModel(); if(something){ var modelToo = new MyViewModelToo(); return View(modelToo); } return View(model); }
puis dans la condition, renvoyez la vue en utilisant ce modèle de vue
public class MyViewModelToo { public string Code { get; set; } }
vous pouvez le supprimer du dictionnaire d'état du modèle comme ceci
if(something){ Modelstate.Remove("Code") }
Si vous n'avez qu'un seul champ, vous pouvez utiliser ce
ModelState.Remove("Code");
Ou vous pouvez utiliser @using System.Web.ModelBinding; dans votre classe
public ActionResult Create() { var nmodel= new MyViewModel().fieldname; if(something){ return View(nmodel); } return View(model); }
Vous ne pouvez pas supprimer un attribut d'une instance de classe. Les attributs appartiennent au type, pas à l'instance.