c# - 返回值是 IEnumerable 而不是 IPaged

标签 c# asp.net ajax web-services

我使用 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<>?

最佳答案

有点猜测,但对于 IEnumerable[<T>]非常常见(有时 IList[<T>] 优先于其他任何事情,并跳入“集合”分支(忽略“容器”上定义的任何属性)。

因此,我希望您最好的选择是没有 IPaged<T>实现 IEnumerable<T> . 这可能意味着必须更改一些地方以添加 .Items .

另一种方法是添加 ForJson()返回类似于 IPaged<T> 的内容的扩展方法。 , 但没有实现 IEnumerable[<T>] .

关于c# - 返回值是 IEnumerable 而不是 IPaged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7378068/

相关文章:

javascript - $.when.apply 返回结果集?

c# - 链接 C++ 和 C#

c# - 如何从电子表格中删除过滤后的数据?

c# - MonoMac 上的 native 发布错误,可能与事件有关

c# - 在 RowDataBound 中设置 OnClientClick 后事件未触发

c# - 如何通过事件从 UserControl 的代码后面触发 JS

jquery - AJAX POST/GET 请求抛出空错误,但 Glassfish 服务器似乎响应正确

c# - 如何突出显示 gridview 中的单词

asp.net - 如何在我的域模型中实现 ASP.NET 成员资格提供程序

jquery - jQuery AJAX 拉取后更新 URL