ObjectDataSource 未能找到带参数的非泛型方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ObjectDataSource 未能找到带参数的非泛型方法相关的知识,希望对你有一定的参考价值。

业务方法:

public static void ModifyBook(string title, int publisherId,string toc, decimal unitPrice, DateTime publishDate, int id)

Book book = BookService.GetBookById(id);
book.Title = title;
book.UnitPrice = unitPrice;
book.Publisher = PublisherService.GetPublisherById(publisherId);
book.TOC = toc;
book.PublishDate = publishDate;
BookService.ModifyBook(book);


页面绑定:

<asp:ObjectDataSource ID="odsBook" runat="server" SelectMethod="GetBookById"
TypeName="MyBookShop.BLL.BookManager" UpdateMethod="ModifyBook"
onupdating="odsBook_Updating">
<UpdateParameters>
<asp:Parameter Name="title" Type="String" />
<asp:Parameter Name="publisherId" Type="Int32" />
<asp:Parameter Name="toc" Type="String" />
<asp:Parameter Name="unitPrice" Type="Decimal" />
<asp:Parameter Name="publishDate" Type="DateTime" />
<asp:Parameter Name="id" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:QueryStringParameter Name="id" QueryStringField="id" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>

其中publisherId的更新值通过下拉菜单的值获得,所以些了下面方法:

protected void dvBooks_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)

DropDownList ddlPublisher = this.dvBooks.FindControl("ddlPublisher") as DropDownList;
this.odsBook.UpdateParameters.Add("publisherId", ddlPublisher.SelectedValue);


更新时候出现错误:

ObjectDataSource“odsBook”未能找到带参数的非泛型方法“ModifyBook”: title, publisherId, toc, unitPrice, publishDate, id, publisherId1。

在此处多出来了“publisherId1”字段,我能肯定是在上面那个方法中使用 this.odsBook.UpdateParameters.Add("publisherId", ddlPublisher.SelectedValue)造成的,但是要修改的话该如何修改?

参考技术A 两个参数, startRowIndex 和 maximumRows,用于指定要返回的数据开始行数和最大记录数。
同时它也会试图使用 SelectCountMethod,但你并没有指定。

//补充
大概是没有的,就算是有,它也是把数据全部加载出来,然后再取其中的一部分,并没有达到节约资源的目的。

你可以适当修改你的

liuyanTableAdapters.liuyanTableAdapter.GetData方法的参数来适应这个分页。
同时应该还要提供一个方法来返回查询的记录数。

给你一个相应的例子:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" EnablePaging="true" SelectCountMethod="GetLogCount"
SelectMethod="LoadLogs" TypeName="EGovernment.SMS.SMSSendLogs">
<SelectParameters>
<asp:Parameter Name="username" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>

其中LoadLogs方法和GetLogCount方法的定义如下:

public static IEnumerable<SMSSendLogEntity> LoadLogs( string username, int startRowIndex, int maximumRows )
//中间代码省略

public static int GetLogCount( string username )
//中间代码省略

另外,站长团上有产品团购,便宜有保证本回答被提问者采纳

以上是关于ObjectDataSource 未能找到带参数的非泛型方法的主要内容,如果未能解决你的问题,请参考以下文章

ObjectDataSource 找不到采用类型参数的非泛型方法

InvalidOperationException:ObjectDataSource 找不到具有参数的非泛型方法:

ObjectDataSource 'odsX' 找不到没有参数的非泛型方法 'methodX'

ObjectDataSource选择参数

ASP.NET ObjectDataSource 找不到具有参数的非泛型方法

QueryStringParameters 在 ASP.Net objectDataSource 上不起作用