.Net ObjectDataSource ошибка: объект не соответствует типу цели

У меня есть ObjectDataSource на странице, которая выдает ошибку "Объект не соответствует типу цели" при вызове его метода вставки. Посмотрев в 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 ответ

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

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

TypeName="MyNamespace.MyType,__code" 

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

TypeName="_MyNamespace.MyType"

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

Другие вопросы по тегам