.Net ObjectDataSource ошибка: объект не соответствует типу цели - PullRequest
2 голосов
/ 01 октября 2010

У меня есть ObjectDataSource на странице, которая выдает ошибку «Объект не соответствует типу цели», когда вызывается его метод Insert.Посмотрев в Google это сообщение, я считаю, что это сообщение обманчиво, и я фактически получаю нулевую ссылку на объект, на котором ObjectDataSource пытается вызвать метод, но я проклят, если смогу выяснить, почему.

<asp:ObjectDataSource ID="dsAddComment" runat="server"  
     DataObjectTypeName="BookCatalogue.InteractionDocuments.UserComment"
     SelectMethod="GetNewComment" TypeName="BookCatalogue.AddCommentPresenter"
     InsertMethod="AddComment"  OnObjectCreating="dsAddComment_ObjectCreating" />

Тип, который вызывается при вставке, является AddCommentPresenter.Метод AddComment не является статичным.Если я изменяю это на статическое, я не получаю ошибку, и метод найден без проблем.Когда он не статичен, возникает ошибка.Вот почему я полагаю, что основная проблема заключается в том, что почему-то я не получаю действительный экземпляр моего класса Presenter при вызове метода AddComment.

Мой класс AddCommentPresenter не имеет конструктора без параметров.Это обычно вызывает ошибку.Чтобы обойти это, я переопределяю событие ObjectCreating в коде моей страницы и назначаю экземпляр класса Presenter.

protected void dsAddComment_ObjectCreating(object sender, ObjectDataSourceEventArgs e) { e.ObjectInstance = presenter; }

Я могу пройти через мой метод ObjectCreating, и это допустимый ненулевой экземпляр Presenter, который передается в свойство e.ObjectInstance.

Мой метод AddComment имеет правильную подпись.

    public void AddComment(UserComment newComment)
    {
        ...
    }

Я также проверил очевидные вещи, такие как неправильное написание имени типа на странице aspx, но там все правильно.

У кого-нибудь есть идеи?Должен сказать, что мне очень трудно работать с классом ObjectDataSource ....

1 Ответ

3 голосов
/ 05 октября 2010

Коллега нашел причину моей проблемы.Класс AddCommentPresenter в моем веб-приложении был определен в каталоге веб-сайта App_Code.По какой-то причине это было причиной ошибки.Переместите его оттуда в главный каталог веб-сайта, и код сработал.Я не могу найти никаких упоминаний в документации ObjectDataSource о том, что это потенциальная ошибка для элемента управления, но вы идете.

Мне также сказали, что класс должен быть в App_Codeпапку, но включите синтаксис ", __ code" в конце TypeName.Например,

TypeName="MyNamespace.MyType,__code" 

но лично у меня не получилось, когда я попробовал.В другом сообщении на форуме ASP.Net предлагалось изменить TypeName на

TypeName="_MyNamespace.MyType"

. Это тоже не сработало.В итоге я просто вытащил класс из папки App_Code.

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