【问题标题】:.Net ObjectDataSource error: Object does not match target type.Net ObjectDataSource 错误:对象与目标类型不匹配
【发布时间】:2010-10-01 02:30:34
【问题描述】:

我的页面上有一个 ObjectDataSource,它在调用 Insert 方法时产生错误“对象与目标类型不匹配”。从谷歌搜索这条消息,我相信这条消息是欺骗性的,我实际上在 ObjectDataSource 试图调用该方法的对象上得到一个空引用错误,但如果我能找出原因,我会很生气。

<asp:ObjectDataSource ID="dsAddComment" runat="server"  
     DataObjectTypeName="BookCatalogue.InteractionDocuments.UserComment"
     SelectMethod="GetNewComment" TypeName="BookCatalogue.AddCommentPresenter"
     InsertMethod="AddComment"  OnObjectCreating="dsAddComment_ObjectCreating" />

Insert 调用的类型是 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 类很难使用......

【问题讨论】:

    标签: asp.net data-binding objectdatasource 2-way-object-databinding


    【解决方案1】:

    一位同事找到了我的问题的原因。我的 Web 应用程序中的 AddCommentPresenter 类是在网站的 App_Code 目录中定义的。由于某种原因,这导致了错误。将其移出那里,进入网站的主目录并且代码工作。我在任何 ObjectDataSource 文档中都找不到任何提及这是控件的潜在问题,但你去吧。

    我还被告知应该可以将类保留在 App_Code 文件夹中,但在 TypeName 的末尾包含语法“,__code”。例如。

    TypeName="MyNamespace.MyType,__code" 
    

    但就我个人而言,我在尝试时没有得到它。 ASP.Net 论坛的另一篇帖子建议将 TypeName 更改为

    TypeName="_MyNamespace.MyType"
    

    这对我也不起作用。我最终只是将类从 App_Code 文件夹中拉出来。

    【讨论】:

    • 在我的情况下也有效,这令人沮丧。就我而言,这是一个新创建的“Web 应用程序”,它是从“网站”转换而来的……这可能是为什么这些 .cs 文件首先位于 App_Code 目录中的原因。调试器是反帮助的,因为它不会在任何地方中断,只是将异常转储到浏览器!哦,这只是 VS 开发服务器中的一个问题……发布到 IIS 时工作正常!很难谷歌,也许这条评论会帮助其他人找到这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多