2016-04-06 15 views
2

Bu ObjectDataSource aşağıdaki fonksiyonu bağlanırken bir hata döndürür: isteğe bağlı parametre ileNeden ObjectDataSource bir işlevin isteğe bağlı parametresini gerektirir?

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

Fonksiyon:

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

I: Burada

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 

hata var kodu yapabileceğimin farkındayım ObjectDataSource'a bir parametre ekleyerek çalışabilirim veya işlevi aşırı yükleyebilirim ancak bu isteğe bağlı bir parametrenin amacını ortadan kaldırır.

cevap

2

Bu, .NET'te bir hata olabilir. veri kaynağı bağlanma yöntemi bulmak için çalışıyor, bu part of it kontrol ediyor this code, çalışıyor

: methodParametersCount senin yöntemin, gelen parametrelerin sayısını ise

if (methodParametersCount != allParameterCount) { 
    continue; 
} 

sizin durumda hangi edecek isteğe bağlı olsa da 1 olsun. Yönteme geçmek için herhangi bir parametre vermediğinizden, allParameterCount 0'dır, bu nedenle daha fazla yöntem aramaya devam eder.

Hiç bulamadığınızdan, bir yöntemle eşleşip eşleşmediğini kontrol etmek ends up. Değilse, tekrar size verilen kaç argüman bakar ve 0 (senin durumunda olduğu gibi), istisna atar eğer görüyoruz: Dediğiniz gibi

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

, basit bir düzeltme bir oluşturmaktır Parametresiz aşırı yük.

+0

Özellikle kukuleta girdiğinizi ve cevabınızı belirtilen kaynaklarla desteklediğinizi takdir ediyorum. –