2011-09-11 2 views
2
내가 IPaged <을 반환 ScriptServices를 사용

> 결과 IPaged하지 : <를 IPaged반환 값이 IEnumerable을하고

[WebService] 
public IPaged<int> DoSomething() { 
    .... 
    .... 
} 

을>입니다 :

public interface IPaged<T> : IEnumerable where T : class 
{ 
    int PageNumber { get; } 
    int PageSize { get; } 
    IEnumerable<T> Items { get; } 
    int PagesCount { get; } 
    int TotalItemsCount { get; } 
} 

해봐요 구현에서 반환 된 페이징 <> 클래스 IPaged <>은 IEnumerator GetEnumerator() :

public IEnumerator GetEnumerator() 
    { 
     return ((IEnumerable)Items).GetEnumerator(); 
    } 
을 구현합니다.

DoSomething을 Javascript ajax에서 호출 할 때마다 스크립트 서비스 엔진은 IEnumerable 인스턴스를 반환하고 IPaged가 아니므로 배열 (GetEnumerator() 메서드에서 Items 멤버)을 가져옵니다.

스크립트 서비스에서 IEbumerable <>이 아닌 IP <>을 어떻게 반환 할 수 있습니까?

답변

1

추측의 비트,하지만 무엇보다 우선하고, 지점 (이하 "용기"에 정의 된 속성을 무시 "의 colllection"에 뛰어들도 IEnumerable[<T>] 매우 일반적인 (때로는 IList[<T>]입니다). 이와 같이

, 당신의 가장 좋은 건 IEnumerable<T>을 구현 IPaged<T>을하지 않는 것입니다 기대합니다. 이 .Items를 추가하는 몇 가지 장소를 변경하는 것을 의미합니다.

또 다른 방법 것 ForJson() 확장 메서드를 추가하는 과 비슷한 ~ IPaged<T>을 반환하지만 IEnumerable[<T>]은 구현하지 않습니다.

관련 문제