【问题标题】:the return value is IEnumerable and not IPaged返回值是 IEnumerable 而不是 IPaged
【发布时间】:2011-09-11 12:07:11
【问题描述】:

我使用 ScriptServices 来返回 IPaged 结果:

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

IPaged 是:

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

从 DoSomething 返回的 Paged 类实现了 IPaged,因此实现了 IEnumerator GetEnumerator()

  public IEnumerator GetEnumerator()
    {
        return ((IEnumerable)Items).GetEnumerator();
    }

每当我从 Javascript ajax 调用 DoSomething 时,脚本服务引擎都会返回 IEnumerable 实例而不是 IPaged,因此我得到一个数组(来自 GetEnumerator() 方法的 Items 成员)。

如何从脚本服务返回 IPaged 而不是 IEnumerable?

【问题讨论】:

    标签: c# asp.net ajax web-services


    【解决方案1】:

    有点猜测,但IEnumerable[&lt;T&gt;](有时IList[&lt;T&gt;] 优先于其他任何东西,并跳转到“collection of”分支(忽略在“容器”上定义的任何属性)。

    因此,我希望您最好不要让IPaged&lt;T&gt; 实现IEnumerable&lt;T&gt;。 这可能意味着必须更改几个位置才能添加.Items

    另一种方法是添加一个ForJson() 扩展方法,该方法返回一些相似IPaged&lt;T&gt;,但不实现IEnumerable[&lt;T&gt;]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-11
      • 2020-07-28
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2019-11-23
      相关资源
      最近更新 更多