ObjectDataSource не имеет значений для вставки - PullRequest
1 голос
/ 11 июня 2011

Я использую ObjectDataSource для выполнения операций CRUD. По какой-то причине я получаю "ObjectDataSource 'ObjectDataSource1' не имеет значений для вставки. Проверьте, что словарь 'values' содержит значения."

Есть предложения?

Я понимаю, что этот элемент управления наследуется от элемента управления ObjectDataSource. Согласно документации http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.insertmethod.aspx

Если установлено свойство DataObjectTypeName, метод разрешается другим способом. ObjectDataSource ищет метод с именем, указанным в свойстве InsertMethod, которое принимает один параметр типа, указанного в свойстве DataObjectTypeName.

Так настроен мой элемент управления ObjectDataSource.

<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>

Я установил точку останова на InsertMethod, но приложение даже не поразило его, когда я пытаюсь сохранить свою форму. Я подозреваю, что DataObjectType по какой-то причине не создается должным образом.

Я пытаюсь выполнить операцию вставки в EditForm элемента управления ASPxGridview, а DataObjectType является EOC POCO, в котором есть некоторые дополнительные свойства (помеченные как виртуальные) для загрузки связанных сущностей из ObjectContext. Я думаю, что это может быть проблемой, но не знаю, как это исправить (смотрел везде !!!).

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

5 голосов
/ 14 июня 2011

Хотя мне не удалось точно определить, почему экземпляр DataObjectType не создается автоматически, я понял, что существует входной параметр, который необходимо добавить до вызова InsertMethod для ObjectDataSource. Для этого мне нужно было добавить входной параметр (в любом случае в моем сценарии) в событие Inserting. Благодаря другому сообщению о StackOverflow я смог выяснить, что мне нужно удалить атрибут «DataObjectTypeName» из ObjectDataSource для возникновения события Inserting.

1 голос
/ 11 июня 2011

Я не заметил атрибут «TypeName» в вашем определении ObjectDataSource.DataObjectTypeName в соответствии с MSDN используется для определения класса «, который элемент управления ObjectDataSource использует для параметра в операции обновления, вставки или удаления данных вместо передачи отдельных значений из элемента управления с привязкой к данным».Если классы совпадают (т. Е. Класс методов CRUD и класс определения объекта данных), оба атрибута должны быть назначены одному и тому же классу.Однако, если ваши методы содержатся в отдельном классе от вашего DTO, вы бы идентифицировали каждый из них по отдельности.

0 голосов
/ 10 июня 2014

Этот полезный пост решил проблему для меня: http://dyslexicanaboko.blogspot.com/2012/09/objectdatasource-has-no-values-to.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...