ObjectDataSource не смог найти неуниверсальный метод с параметрами:

Я пытаюсь использовать Gridview, чтобы показать данные из источника данных Object. Это дает мне ошибку:

ObjectDataSource 'odsStores' could not find a non-generic method 'ProcessDelete' that has parameters: ProcessID.

Я читал много других ответов на этот вопрос о сопоставлении регистра, формата сопоставления, переменных, но я думаю, что все это сделал правильно. Вот страница aspx:

                <asp:GridView ID="gridStores" runat="server" AllowSorting="False" AutoGenerateColumns="False"
                    CssClass="grid-main" DataSourceID="odsStores" EnableViewState="False" OnDataBound="gridStores_DataBound"
                    OnRowDataBound="gridStores_RowDataBound">
                    <Columns>
                        <asp:TemplateField ShowHeader="False">
                            <ItemTemplate>
                                <asp:Image ID="imgModel" runat="server" AlternateText="Click to See Details" CssClass="img-details"
                                    EnableViewState="False" ImageUrl="~/img/detail.gif" />
                            </ItemTemplate>
                            <ItemStyle CssClass="grid-main-detail" />
                        </asp:TemplateField>
                        <asp:BoundField DataField="ProcessID" HeaderText="ProcessID" />
                        <asp:BoundField DataField="ProcessName" HeaderText="Process Name" ReadOnly="False" />
                        <asp:BoundField DataField="ProcessDescription" HeaderText="Process Description" ReadOnly="False" />
                        <asp:BoundField DataField="UpdateUserID" HeaderText="Last Updated By" ReadOnly="True" />
                        <asp:BoundField DataField="UpdateTimestamp" HeaderText="Last Updated" ReadOnly="True" />
                        <asp:CommandField ShowEditButton="True" />
                        <asp:CommandField ShowDeleteButton="True" />
                    </Columns>
                </asp:GridView>

Вот код, все, что у меня есть, - это точка останова, и она никогда не попадает в нее.

<DataObjectMethod(DataObjectMethodType.Delete)> _
Private Sub ProcessDelete(ByVal ProcessID As String)
    Dim x As Integer = 0
    x = x + 1
End Sub

Вот источник данных объекта:

<asp:ObjectDataSource ID="odsStores" runat="server" EnableViewState="False" OldValuesParameterFormatString="original_{0}"
                    SelectCountMethod="GetRowCount" SelectMethod="GetData" TypeName="DataWarehouseUserInterface.ProcessBSL"
                    UpdateMethod="ProcessUpdate" DeleteMethod="ProcessDelete" >
                    <UpdateParameters>
                        <asp:FormParameter Name="ProcessName" Type="String" FormField="ProcessName" />
                        <asp:FormParameter Name="ProcessDescription" Type="String" FormField="ProcessDescription" />
                    </UpdateParameters>
                    <DeleteParameters>
                        <asp:FormParameter Name="ProcessID" Type="String"/>
                    </DeleteParameters>
                </asp:ObjectDataSource>

person gbam    schedule 22.07.2013    source источник
comment
Не могли бы вы опубликовать разметку <asp:objectdatasource?   -  person Karl Anderson    schedule 22.07.2013
comment
@KarlAnderson, добавил: извините, я не публиковал это изначально.   -  person gbam    schedule 22.07.2013
comment
Я здесь как бы снимаю в темноте, но я смотрел на это в MSDN и заметил атрибут typename в элементе управления ObjectDataSource: typename = Samples.AspNet.CS.EmployeeLogic. Пропускаете ли вы typename по какой-либо причине, и если да, то когда вы опускаете имя типа, где по умолчанию источник данных ищет методы?   -  person Karl Anderson    schedule 22.07.2013
comment
@KarlAnderson, спасибо, я впечатлен, что вы догадывались о том, что было не так, не видя моих файлов :). Ваше здоровье.   -  person gbam    schedule 22.07.2013
comment
Пожалуйста, покажите свой файл класса, в котором вы реализовали методы для ObjectDataSource, особенно метод Delete.   -  person R.C    schedule 23.07.2013


Ответы (2)


Источник данных My Object искал в моем ProcessBSL метод ProcessDelete с соответствующей подписью. Я написал свои методы в коде файла ProcessBSL.

Это была строка кода, которая повлияла на это:

TypeName="DataWarehouseUserInterface.ProcessBSL"

Резюме: Если он вызывает эту ошибку, убедитесь, что подпись вашего метода верна. Убедитесь, что слой BSL правильный. Убедитесь, что у вас есть _ - это тоже остановило мою работу. Надеюсь, это поможет кому-то другому.

Ваше здоровье.

person gbam    schedule 22.07.2013
comment
Ответить на свой вопрос - это здорово. - person Karl Anderson; 22.07.2013
comment
Параметр TypeName вводит в заблуждение. Я установил для него Тип объекта в моем IEnumerable. Спасибо, что очистили gbam! - person Michael Angstadt; 08.04.2014

Попробуйте сделать метод общедоступным, чтобы проверить, работает ли он.

person Brian Mains    schedule 22.07.2013
comment
Та же ошибка. Это также ошибки при обновлении. Я просто предположил, что будет проще опубликовать удаление, извиняюсь за первоначальную путаницу. - person gbam; 22.07.2013