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