2016-04-06 5 views
2

Это ObjectDataSource возвращает ошибку при подключении к следующей функции:Почему ObjectDataSource требует необязательный параметр функции?

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

Функция с дополнительным параметром:

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 'odsActiveProductTypes' could not find a non-generic method 'GetProductTypes' that has no parameters.

I Я могу сделать код работайте, добавив параметр в ObjectDataSource, или я мог бы перегрузить функцию, но это побеждает цель необязательного параметра.

ответ

2

Это, возможно, ошибка в .NET.

Когда источник данных пытается найти способ, чтобы связываться, он работает this code, где part of it проверяет:

if (methodParametersCount != allParameterCount) { 
    continue; 
} 

Где methodParametersCount является подсчет параметров из метода, который в вашем случае будет 1, хотя и необязательно. Так как вы не дали ему никаких параметров для перехода к методу, allParameterCount равно 0, поэтому он продолжает искать другие методы.

Не найдена, она ends up проверяет, соответствует ли она метод. Если нет, то снова проверяет, сколько аргументов вы указали, и если 0 (как в вашем случае), бросает исключение, вы видите:

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

Как говорится, просто исправить это создать перегрузка без параметров.

+0

Я особенно ценю, что вы попали под капот и поддержали ваш ответ с цитируемыми источниками. –

Смежные вопросы