2 votes

ObjectDataSource n'a pas de valeurs à insérer

J'utilise un ObjectDataSource pour effectuer des opérations CRUD. Pour une raison quelconque, j'obtiens un message "ObjectDataSource 'ObjectDataSource1' n'a pas de valeurs à insérer. Check that the 'values' dictionary contains values."

Des suggestions ?

Je comprends que ce contrôle hérite du contrôle ObjectDataSource. D'après la documentation http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.insertmethod.aspx

Si la propriété DataObjectTypeName est définie, la méthode est résolue différemment. L'ObjectDataSource recherche une méthode dont le nom est spécifié dans la propriété InsertMethod et qui prend un paramètre du type spécifié dans la propriété DataObjectTypeName.

C'est ainsi que mon contrôle ObjectDataSource est configuré.

<asp: ObjectDataSource ID="ObjectDataSource1" runat="server" 
                DataObjectTypeName="MyApplication.Entities.Domain.MyObject" ConflictDetection="CompareAllValues"
                OldValuesParameterFormatString="original{0}" SelectMethod="GetUserDisplays"
                InsertMethod="CreateMyObject" UpdateMethod="UpdateMyObject" DeleteMethod="DeleteDisplay">
            </asp:ObjectDataSource>

J'ai placé un point d'arrêt sur InsertMethod, mais l'application ne l'atteint même pas lorsque j'essaie d'enregistrer mon formulaire. Je soupçonne que le type DataObjectType n'est pas instancié correctement pour une raison quelconque.

J'essaie d'effectuer l'opération Insert dans l'EditForm d'un contrôle ASPxGridview et le DataObjectType est un EF POCO qui a quelques propriétés supplémentaires (marquées virtuelles) pour charger les entités liées à partir de l'ObjectContext. Je pense que c'est peut-être le problème mais je ne sais pas comment le résoudre (j'ai cherché partout ! !!).

Toute aide serait grandement appréciée !

6voto

Rich Points 1000

Bien que je n'aie pas été en mesure de déterminer exactement pourquoi le type DataObjectType n'est pas instancié automatiquement, j'ai réalisé qu'il y avait un paramètre d'entrée qui devait être ajouté avant d'appeler la méthode InsertMethod sur l'ObjectDataSource. Pour ce faire, je devais ajouter le paramètre d'entrée (dans mon scénario en tout cas) dans l'événement Inserting. Grâce à un autre post sur StackOverflow, j'ai pu comprendre que je devais supprimer l'attribut 'DataObjectTypeName' de l'ObjectDataSource pour que l'événement Inserting se déclenche.

2voto

GunnerL3510 Points 590

Je n'ai pas remarqué d'attribut "TypeName" dans votre définition d'ObjectDataSource. L'attribut DataObjectTypeName selon MSDN est utilisée pour identifier la classe "que le contrôle ObjectDataSource utilise comme paramètre dans une opération de mise à jour, d'insertion ou de suppression de données, au lieu de transmettre des valeurs individuelles à partir du contrôle lié aux données". Si les classes sont identiques (c'est-à-dire la classe des méthodes CRUD et la classe de définition des objets de données), les deux attributs doivent être assignés à la même classe. Toutefois, si vos méthodes sont contenues dans une classe distincte de celle de votre DTO, vous devez identifier chacune d'entre elles individuellement.

0voto

Antoni Points 348

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X