2016-04-06 13 views
2

Dieses ObjectDataSource einen Fehler zurück, wenn auf die folgende Funktion verbinden:Warum benötigt ObjectDataSource einen optionalen Parameter einer Funktion?

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

Funktion mit optionalen Parametern:

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 

Hier ist der Fehler:

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

I erkennen, dass ich den Code machen kann Arbeit durch Hinzufügen eines Parameters zu ObjectDataSource oder ich könnte die Funktion überladen, aber das den Zweck eines optionalen Parameters vereitelt.

Antwort

2

Es ist wohl ein Fehler in .NET.

Wenn die Datenquelle, um die Methode zu finden versucht, zu binden, es läuft this code, wo part of it prüfen:

if (methodParametersCount != allParameterCount) { 
    continue; 
} 

Wo methodParametersCount die Anzahl der Parameter aus dem Verfahren ist, das wird in Ihrem Fall sei 1, wenn auch optional. Da Sie keine Parameter angegeben haben, die an die Methode übergeben werden können, ist allParameterCount 0, also wird weiter nach weiteren Methoden gesucht.

Haben keine gefunden, es überprüft ends up, ob es eine Methode übereinstimmt. Wenn nicht, überprüft es wieder, um zu sehen, wie viele Argumente, die Sie geliefert, und wenn 0 (wie in Ihrem Fall), die Ausnahme werfen Sie sehen:

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

Wie Sie sagen, die einfache Lösung ist eine erstellen Überlastung ohne Parameter.

+0

Ich schätze besonders, dass Sie unter die Haube gingen und Ihre Antwort mit zitierten Quellen unterstützten. –

Verwandte Themen