我的页面上有一个 ObjectDataSource,它在调用其 Insert 方法时产生错误“对象与目标类型不匹配”。从谷歌搜索这条消息,我相信这条消息是欺骗性的,我实际上在 ObjectDataSource 试图调用该方法的对象上得到一个空引用错误,但如果我能找出原因,我会很生气。
<asp:ObjectDataSource ID="dsAddComment" runat="server"
DataObjectTypeName="BookCatalogue.InteractionDocuments.UserComment"
SelectMethod="GetNewComment" TypeName="BookCatalogue.AddCommentPresenter"
InsertMethod="AddComment" OnObjectCreating="dsAddComment_ObjectCreating" />
插入时调用的类型是 AddCommentPresenter。AddComment 方法不是静态的。如果我将其更改为静态,我不会收到错误,并且找到该方法没有问题。当它不是静态的时,就会发生错误。这就是为什么我认为根本问题是,当调用 AddComment 方法时,不知何故我没有获得我的 Presenter 类的有效实例。
我的 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 类很难使用......