Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ObjectDataSource找不到接受类型参数的非泛型方法_Asp.net_Vb.net_Objectdatasource_Detailsview - Fatal编程技术网

Asp.net ObjectDataSource找不到接受类型参数的非泛型方法

Asp.net ObjectDataSource找不到接受类型参数的非泛型方法,asp.net,vb.net,objectdatasource,detailsview,Asp.net,Vb.net,Objectdatasource,Detailsview,ObjectDataSource(绑定到DetailsView)没有检查delete方法的DeleteParameters(我在标记和数据对象中都指定了delete方法需要整数),我遇到了一个棘手的问题。 以下是标记: <asp:ObjectDataSource ID="odsFrontPageBannerDetails" runat="server" DataObjectTypeName="FrontPage.Banner" DeleteMethod="DeleteFrontPageBa

ObjectDataSource(绑定到DetailsView)没有检查delete方法的DeleteParameters(我在标记和数据对象中都指定了delete方法需要整数),我遇到了一个棘手的问题。 以下是标记:

<asp:ObjectDataSource ID="odsFrontPageBannerDetails" runat="server" DataObjectTypeName="FrontPage.Banner" DeleteMethod="DeleteFrontPageBanner" InsertMethod="InsertFrontPageBanner" SelectMethod="GetFrontPageBanner" UpdateMethod="UpdateFrontPageBanner" TypeName="FrontPage.BannersData">
    <DeleteParameters>
        <asp:Parameter Name="idx" Type="Int32"  />
    </DeleteParameters>
    <SelectParameters>
        <asp:ControlParameter ControlID="GridView1" Name="idx" PropertyName="SelectedValue" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

目标是:

<DataObjectMethod(DataObjectMethodType.Delete, True)> _
Public Shared Function DeleteFrontPageBanner(ByVal idx As Integer) As Integer
    Dim retval As Integer = 0
    Dim iReturnCode As Integer = 0
    Using conn As New SqlConnection(GetConnStr())
        Using cmd As New SqlCommand
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "FrontPage_BannerDelete"
            cmd.Connection = conn
            cmd.Parameters.AddWithValue("@idx", idx)
            Try
                conn.Open()
                iReturnCode = cmd.ExecuteNonQuery
                If iReturnCode >= 0 Then
                    retval = 1
                    LastErrorMsg = String.Empty
                Else
                    Throw New DataException("Return code is: " & iReturnCode)
                End If
            Catch ex As Exception
                LastErrorMsg = ex.Message
                retval = 0
            End Try
        End Using
    End Using
    Return retval
End Function
_
公共共享函数DeleteFrontPageBanner(ByVal idx为整数)为整数
Dim retval为整数=0
Dim iReturnCode为整数=0
将conn用作新的SqlConnection(GetConnStr())
使用cmd作为新的SqlCommand
cmd.CommandType=CommandType.storedProcess
cmd.CommandText=“FrontPage\u BannerDelete”
cmd.Connection=conn
cmd.Parameters.AddWithValue(“@idx”,idx)
尝试
康涅狄格州公开赛
iReturnCode=cmd.ExecuteNonQuery
如果iReturnCode>=0,则
retval=1
LastErrorMsg=String.Empty
其他的
抛出新的DataException(“返回代码为:”&iReturnCode)
如果结束
特例
LastErrorMsg=ex.消息
retval=0
结束尝试
终端使用
终端使用
返回返回
端函数
以及detailsview标记:

   <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" CellPadding="4" DataSourceID="odsFrontPageBannerDetails" ForeColor="#333333" GridLines="None" Height="50px" Width="338px">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
        <EditRowStyle BackColor="#999999" />
        <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
        <Fields>
            <asp:BoundField DataField="idx" HeaderText="idx" ReadOnly="True" SortExpression="idx" />
            <asp:CheckBoxField DataField="Active" HeaderText="Active" SortExpression="Active" />
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
            <asp:BoundField DataField="BannerText" HeaderText="BannerText" SortExpression="BannerText" />
            <asp:BoundField DataField="BannerImage" HeaderText="Banner Image" SortExpression="BannerImage" />
            <asp:BoundField DataField="BannerLink" HeaderText="Go To Page Link" SortExpression="BannerLink" />
            <asp:BoundField DataField="BackgroundColor" HeaderText="Background Color" SortExpression="BackgroundColor" />
            <asp:BoundField DataField="BannerHeight" HeaderText="Banner Height" HtmlEncode="False" SortExpression="BannerHeight" />
            <asp:BoundField DataField="StartDate" DataFormatString="{0:MM/dd/yyyy}" HeaderText="Start Date" HtmlEncode="False" SortExpression="StartDate" />
            <asp:BoundField DataField="EndDate" DataFormatString="{0:MM/dd/yyyy}" HeaderText="End Date" HtmlEncode="False" SortExpression="EndDate" />
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
        </Fields>
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    </asp:DetailsView>

该错误表示完全忽略了DeleteParameters!(我直接从视频教程中学习了一个例子,对作者来说效果很好)

ObjectDataSource“odsFrontPageBannerDetails”找不到 非泛型方法“DeleteFrontPageBanner”,其参数为 键入“FrontPage.Banner”

有什么想法吗?我尝试重建解决方案和页面,但没有成功

在尝试了我能想到的所有参数组合后,都没有成功,我决定只更改delete方法以接受Frontpage.Banner对象,现在它会删除而不会出错-请参阅下面的更改:

<DataObjectMethod(DataObjectMethodType.Delete, True)> _
Public Shared Function DeleteFrontPageBanner(ByVal o As FrontPage.Banner) As Integer
    Dim retval As Integer = 0
    Dim iReturnCode As Integer = 0
    Using conn As New SqlConnection(GetConnStr())
        Using cmd As New SqlCommand
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "FrontPage_BannerDelete"
            cmd.Connection = conn
            cmd.Parameters.AddWithValue("@idx", o.idx)
            Try
                conn.Open()
                iReturnCode = cmd.ExecuteNonQuery
                If iReturnCode >= 0 Then
                    retval = 1
                    LastErrorMsg = String.Empty
                Else
                    Throw New DataException("Return code is: " & iReturnCode)
                End If
            Catch ex As Exception
                LastErrorMsg = ex.Message
                retval = 0
            End Try
        End Using
    End Using
    Return retval
End Function
_
作为整数的公共共享函数DeleteFrontPageBanner(ByVal o作为FrontPage.Banner)
Dim retval为整数=0
Dim iReturnCode为整数=0
将conn用作新的SqlConnection(GetConnStr())
使用cmd作为新的SqlCommand
cmd.CommandType=CommandType.storedProcess
cmd.CommandText=“FrontPage\u BannerDelete”
cmd.Connection=conn
cmd.Parameters.AddWithValue(“@idx”,o.idx)
尝试
康涅狄格州公开赛
iReturnCode=cmd.ExecuteNonQuery
如果iReturnCode>=0,则
retval=1
LastErrorMsg=String.Empty
其他的
抛出新的DataException(“返回代码为:”&iReturnCode)
如果结束
特例
LastErrorMsg=ex.消息
retval=0
结束尝试
终端使用
终端使用
返回返回
端函数

仍然希望解释为什么标记中的删除参数被完全忽略。

通常,对象数据源将根据参数名称以任何顺序解析方法,而不检查数据类型

但是,如果设置了DataObjectTypeName属性,则该方法将以不同的方式解析。ObjectDataSource查找具有DeleteMethod属性中指定名称的方法,该方法采用DataObjectTypeName属性中指定类型的一个参数。在这种情况下,参数的名称无关紧要


请参见

能否显示类型定义,为什么CIH持有您的
DeleteFrontPageBanner
方法?我尝试将目标框架更改为3.5并重新编译(在另一个论坛中建议),但没有任何帮助。在上面的代码中,我确实忘记了在detailsView中添加DataKeyNames=“idx”。更新和插入工作完美。这看起来像是配置实用程序中的一个bug,但我只需要知道ObjectDataSource的正确手动配置。我将尝试让Delete方法接收整个对象(而不是一个整数),看看这是否有效。好的,看起来您只能将同一个对象传递给所有方法,包括带有ObjectDataSource的Delete方法。想想看吧我不这么认为,我要问的是
DeleteFrontPageBanner
方法是否驻留在
FrontPage.BannersData
类中?我就是这么想的。我不明白的是,为什么显示Delete方法的示例有一个整数参数,尽管它根本不应该工作,因为您需要指定Update和Insert方法中使用的相同参数。仔细想想。不确定您使用了哪些示例,也许您可以提供一个链接,但在microsoft文档中肯定有这样的记录。