2016-04-06 11 views
2

このObjectDataSource次の関数への接続時にエラーを返します:オプションのパラメータを持つObjectDataSourceに関数のオプションのパラメータが必要なのはなぜですか?

<asp:ObjectDataSource ID="odsActiveProductTypes" runat="server" SelectMethod="GetProductTypes" TypeName="MyRepo"> 

機能:

ObjectDataSource 'odsActiveProductTypes' could not find a non-generic method 'GetProductTypes' that has no parameters.

I:ここで

Public Function GetProductTypes(Optional ByVal activeOnly As Boolean = True) As IQueryable(Of ProductType) 
    If activeOnly Then 
     Return MyContext.ProductTypes.Where(Function(pt) pt.Active = True) 
    Else 
     Return MyContext.ProductTypes 
    End If 
End Function 

エラーです私はコードを作ることができることを実現するObjectDataSourceにパラメータを追加して作業するか、関数をオーバーロードする可能性がありますが、これはオプションのパラメータの目的を無効にします。

答えて

2

おそらく.NETのバグです。データソースにバインドする方法を見つけようとしたとき、それはpart of itがチェックしているthis code、実行している

methodParametersCountはあなたの方法から、パラメータの数をある

if (methodParametersCount != allParameterCount) { 
    continue; 
} 

をお使いの場合はその意志オプションではあるが、1である。メソッドに渡すパラメータを指定していないので、allParameterCountは0なので、より多くのメソッドを探し続けます。

見つからない場合はends upと一致するかどうかを確認してください。そうでない場合、それは再びあなたが供給どのように多くの引数を確認するためにチェックし、0(あなたの場合のように)場合は、あなたが見ている例外をスロー:あなたが言うように

if (allParameterCount == 0) { 
    throw new InvalidOperationException(SR.GetString(SR.ObjectDataSourceView_MethodNotFoundNoParams, _owner.ID, methodName)); 
} 

、簡単な修正は、ANを作成することですパラメータなしでオーバーロードします。

+0

私は特にあなたがフードの下にあり、引用された情報源であなたの答えを支持してくれたことに感謝します。 –

関連する問題