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.