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