Puis-je enregistrer un classeur de modèle personnalisé quelque part autre que Global.asax?

StackOverflow https://stackoverflow.com/questions/3041242

  •  27-09-2019
  •  | 
  •  

Question

Il serait utile de limiter la portée d'un liant de modèle personnalisé pour juste une méthode d'action du contrôleur spécifique ou son contrôleur entier. Hanselman a écrit une phrase qui impliquait d'autres emplacements pour l'enregistrement de liant modèle personnalisé, mais n'a jamais semblé terminer la pensée:

  

Vous pouvez soit mettre ce classeur modèle personnalisé en charge de tous vos DateTimes en vous inscrivant dans le Global.asax

Est-il possible de faire ces enregistrements à une portée plus limitée du système de commande? Si oui, est-il une raison pour éviter de le faire en dehors de la Global.asax MvcApplication (par exemple, des raisons de performance)?

Était-ce utile?

La solution

Comme je fermais les onglets que j'ouvris à cette question que je ne l'avais pas atteint avant d'abandonner, je l'ai trouvé quelqu'un avec une réponse. Vous pouvez attribuer un ModelBinderAttribute à vos modèles de vue:

[ModelBinder(typeof(SomeEditorModelModelBinder))]
public class SomeEditorModel {
    // display model goes here
}
public class SomeEditorModelModelBinder : DefaultModelBinder {
    // custom model binder for said model goes here
}

Alors qu'il était pas tout à fait ce que je cherchais, il est encore plus précis que l'enregistrement pour une méthode de contrôleur ou contrôleur.

Mise à jour

Merci au commentaire de Levi pointant vers une solution beaucoup mieux. Si vous consommez de l'objet avec un liant de modèle personnalisé dans une méthode d'action MVC directement, vous pouvez simplement décorer le paramètre de cette méthode avec la propriété ModelBinder.

public ActionResult SomeMethod([ModelBinder(typeof(SomeEditorModelBinder))]SomeEditorModel model) { ... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top