Je gratte un peu la tête à la manière dont les liants de modèle font leur travail dans ASP.NET MVC. p>
Pour être spécifique, la méthode BinModel () comporte un paramètre ModelBindingContext qui contient le nom de modèle et le type, mais je ne comprends pas comment le modèleBindingContext reçoit ces valeurs. p>
Un modèle MVC doit être rempli à partir de valeurs de formulaire posté ou de paramètres de chaîne de requête, ou d'autres sources de données. Mais quel mécanisme détermine le type de modèle confié au modèleBindingContext et comment est-ce que l'un type de modèle choisi par un autre type de modèle, plus de (dire) une liste simple contenant les valeurs postées individuelles? p>
Il me semble juste que le modèleBindingContext "sait" le type de modèle à la main, et je ne suis pas sûr de l'origine ou du flux de travail impliqué dans la population. P>
3 Réponses :
Le modèleBindingContext "sait" le type de modèle à remettre parce que vous devez soit: strong> Exemple de modelbinders.binders.add (): Fort > p> Si vous avez enregistré votre modèleBinder et avez implémenté la méthode Bindmodel: strong> p>
bindingContext.ValueProvider["Name"].AttemptedValue;
Merci. Je suis toujours confus sur quel code prend et lit les informations de formulaire posté, décide que c'est un contact, puis le transmet à l'objet ModelBindingContext dans la classe ContactBuenter.
question intéressante. Voici un simple aperçu de ce que MVC fait. Tout est géré par la classe de contrôlageInovker. Ce n'est pas dans une commande spécifique, mais est proche. P>
Vous pouvez le voir pour vous-même dans le source ASP.NET MVC situé à CodePlex.com a>. Recherchez la classe ControllerActionInvoker et la méthode GetParameTervalue. P>
La façon dont je vois que le contrôleurInvoker utilise la réflexion pour obtenir le type de paramètre, il vérifie ensuite si un modèle de modèle est affecté à ce type, le cas échéant, il instanciait de ce modèle et la transmet le reliantContext qui contiendra le (modèle Objet, Nom du modèle, Type de modèle, Filtre de propriétés) Pour cet objet de type de paramètre et une collection de fournisseurs de valeur (ModelBindingContext.valueProvider) de tous les autres fournisseurs de valeurs (formulaire, chaîne de requête, etc.), agissant comme un grand fournisseur de valeur virtuelle. p>
Le modèle ModelBinder utilise alors une réflexion pour obtenir tous les noms de propriété du type SSE attribué pour se lier et s'exécute de manière récursive contre tous les fournisseurs de valeur dans (ModelBindingContext.valueprovider) et recherchent les noms de propriété dans ces fournisseurs de valeur, liant ces valeurs Pour qui les noms (extraits du client) correspondent aux noms de propriété Type, lorsqu'ils correspondent au fournisseur de valeur renvoie un objet ValueProviderResult, portant le nom et la valeur de la propriété respective sur le modèle. p>
Jeez, désolé, j'ai marqué de fermer sur la mauvaise question