Question

Je suis en train de trouver quelques exemples de la construction d'un modèle de liaison personnalisé pour un scénario de liaison unique que je dois gérer, mais tous les articles que j'ai trouvés pour les anciennes versions de MVC qui ne sont plus pertinentes dans MVC2. J'ai référencement le code source DefaultModelBinder pour essayer d'obtenir une idée générale de ce que je dois faire, mais il est tout à fait plus compliqué que mon scénario et je vais avoir du mal à isoler la logique spécifique que je dois mettre en œuvre.

Mon but est de prendre une collection de paires Checkbox / Textbox et pour toutes les paires cochés Je voudrais créer une paire clé / valeur de la valeur de la case correspondante et la valeur de la zone de texte associée. Après l'agrégation de ces données que je dois faire une sérialisation chaîne sur la collection afin que je puisse le stocker dans une propriété de chaîne du type de modèle souhaité. Je l'ai déjà les données envoyées à partir de la forme dans un format gérable qui me permettra de relier un checkbox donné à une zone de texte spécifique, il est juste une question de trouver comment obtenir toutes les pièces où je les ai besoin.

Quelqu'un sait-il de quelques tutoriels mis à jour qui peut me permettre de démarrer avec la construction d'un modèle de liaison personnalisé?

Était-ce utile?

La solution

Je ne sais pas pourquoi vous pensez que beaucoup de choses ont changé depuis MVC 1 concernant les classeurs de modèle personnalisé. Mais si je comprends ce que vous essayez de le faire, il devrait être assez facile.

public class CustomModelBinder : DefaultModelBinder {
    public override object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {

        NameValueCollection form = controllerContext.HttpContext.Request.Form;
        //get what you need from the form collection

        //creata your model
        SomeModel myModel = new SomeMode();
        myModel.Property = "value";
        //or add some model errors if you need to
        ModelStateDictionary mState = bindingContext.ModelState;
        mState.Add("Property", new ModelState { });
        mState.AddModelError("Property", "There's an error.");

        return myModel; //return your model
    }
}

Et votre action:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){
    //...
}

Était-ce le genre d'information que vous cherchez?

Autres conseils

Jetez un oeil à plusieurs exemples de classeurs personnalisés MVC modèle sur mon blog.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top