ASP.NET MVC - Modèle de liaison Personnalisé sur le Type d'Interface
Je ne sais pas si ce comportement est normal ou pas, mais il semble que la coutume de la liaison de modèle ne fonctionne pas lorsque la liaison est affecté à un type d'interface. Quelqu'un a expérimenté ce?
public interface ISomeModel {}
public class SomeModel : ISomeModel {}
public class MvcApplication : HttpApplication {
protected void Application_Start(object sender, EventArgs e) {
ModelBinders.Binders[typeof(ISomeModel)] = new MyCustomModelBinder();
}
}
Avec le code ci-dessus lorsque je lier à un modèle de type SomeModel, MyCustomModelBinder n'est jamais atteint; cependant, si je change le code ci-dessus et remplacer typeof(ISomeModel)
pour typeof(SomeModel)
et post exactement la même forme MyCustomModelBinder est appelé comme prévu. Est-ce que semblent droit?
Modifier
Je me suis retrouvé dans cette situation plus d'un an après j'ai d'abord posé cette question, et maintenant j'ai une solution qui fonctionne. Merci Matt Hidinger!
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr si son directement liés, mais oui il y a des choses que vous devez penser lors de l'utilisation de la liaison de modèle et interfaces... j'ai couru dans des problèmes similaires avec le modèle de classeur par défaut, mais il peut ne pas être directement liée, selon la façon dont vous faites les choses...
Ont un oeil à ce qui suit:
ASP.net MVC v2 - Débogage du Modèle de Problèmes de Liaison - BUG?
ASP.net MVC v2 - Débogage du Modèle de Problèmes de Liaison - correction d'un BUG?
Je faisais des expériences avec ce problème et je suis venu avec une solution de tris. J'ai fait une classe appelée InterfaceModelBinder:
Qui j'ai enregistré dans mon Application_Start de la manière suivante:
L'interface et une implémentation concrète ressembler à ceci:
Le seul inconvénient de cette approche dans son ensemble (comme vous l'avez recueilli déjà), c'est que j'ai besoin d'obtenir le AssemblyQualifiedName de quelque part, et dans cet exemple, elle est stockée comme un champ caché sur le côté client, comme suit:
Je ne suis pas certain cependant que les inconvénients d'exposer le Type de nom pour le client sont à la peine de perdre les avantages de cette approche. Une Action de ce genre peut gérer tous mes envois de formulaire:
Toute réflexion sur cette approche?
Tout à coup, une MVC3 solution apparaît:
http://www.matthidinger.com/archive/2011/08/16/An-inheritance-aware-ModelBinderProvider-in-MVC-3.aspx