1
votes

Comment supprimer ViewModel requis avant de l'envoyer?

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?


1 commentaires

Vous ne pouvez pas supprimer un attribut d'une instance de classe. Les attributs appartiennent au type, pas à l'instance.


3 Réponses :


1
votes

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; }
}


0 commentaires

0
votes

vous pouvez le supprimer du dictionnaire d'état du modèle comme ceci

if(something){
    Modelstate.Remove("Code")
}


0 commentaires

0
votes

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);
}


0 commentaires