2

У меня есть объект ObjectDataSource на странице, которая создает ошибку «Object не соответствует типу назначения» при вызове метода Insert. Из сообщения Googling этого сообщения я считаю, что это сообщение обманчиво, и на самом деле я получаю пустую ошибку ссылки на объект, который ObjectDataSource пытается вызвать метод, но я чертовски, если я могу понять, почему..Net Ошибка объекта 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 очень трудный для работы с ...

ответ

3

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

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

TypeName="MyNamespace.MyType,__code" 

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

TypeName="_MyNamespace.MyType" 

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

+0

Работал также в моем случае, человек, который расстраивал. В моем случае это было недавно созданное «веб-приложение», которое было преобразовано с «веб-сайта» .... вероятно, почему эти файлы .cs были в каталоге «App_Code» в первую очередь. Отладчик был анти-полезным, потому что он нигде не сломался, просто бросил исключение в браузер! О, и это была только проблема на сервере разработки VS ... отлично работала при публикации в IIS! Трудно для Google, возможно, этот комментарий поможет другим найти это. –

Смежные вопросы