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

У меня есть 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 ....


person Treighton    schedule 01.10.2010    source источник


Ответы (1)


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

Мне также сказали, что можно сохранить класс в папке App_Code, но включить синтаксис «, __ code» в конец TypeName. Например.

TypeName="MyNamespace.MyType,__code" 

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

TypeName="_MyNamespace.MyType"

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

person Treighton    schedule 05.10.2010
comment
Сработало и в моем случае, человек, который расстраивал. В моем случае это было недавно созданное веб-приложение, преобразованное с веб-сайта ... возможно, именно поэтому эти файлы .cs находились в каталоге App_Code. Отладчик был бесполезен, потому что он нигде не сломался, просто выгружал исключение в браузер! О, и это была проблема только на сервере разработки VS ... отлично работала при публикации в IIS! Трудно погуглить, может быть, этот комментарий поможет другим найти это. - person S'pht'Kr; 15.08.2013