如何将参数传递给剑道UI网格数据源的信号传输Read方法



我正在看演示:Telerik的演示这Telerik的例子

我仍然不明白如何使用这种技术来传递参数到Read方法,所以它不会读取所有游戏或产品,而是只读取一个游戏或产品的子集。如果我改变Read方法接收参数的服务器端代码,它永远不会被击中,我不知道如何从传输中传递参数客户端定义定义…任何帮助都是非常重要的欣赏!

我把这个问题贴到了Telerik的论坛上,得到了这个应该可以工作的!Telerik的回答

如果将来有人出现并且其他答案中的链接已经消失,或者对于那些不想下载项目文件并自己筛选它的人,这里有来自Telerik论坛上给出的答案的更多细节:

他们使用Kendo.DynamicLinq来"绑定请求参数"。

他们创建了一个自定义类,该类反映了AJAX网格操作中通常使用的现有DataSourceRequest类的结构。

using System.Collections.Generic;
using Kendo.DynamicLinq;
namespace SignalRLocalHub.Models
{
    public class MyDataSourceRequest
    {
        public int Take { get; set; }
        public int Skip { get; set; }
        public int Page { get; set; }
        public int PageSize { get; set; }
        public Filter Filter { get; set; }
        public IEnumerable<Sort> Sort { get; set; }
        public IEnumerable<Aggregator> Aggregates { get; set; }
    }
}

ProductHub (SignalR hub)类中,这是Read方法:

public DataSourceResult Read(MyDataSourceRequest request)
{
    return productService.Read()
        .ToDataSourceResult(
            request.Take, 
            request.Skip, 
            request.Sort, 
            request.Filter, 
            request.Aggregates);
}
作为参考,它调用的productService.Read方法看起来像这样:
//int take, int skip, IEnumerable<Sort> sort, Filter filter, IEnumerable<Aggregator> aggregates
public IQueryable<ProductViewModel> Read()
{
    return entities.Products
        .OrderBy(p => p.ProductID)
        .Select(product => new ProductViewModel
        {
            ProductID    = product.ProductID,
            ProductName  = product.ProductName,
            UnitPrice    = product.UnitPrice.HasValue    ? product.UnitPrice.Value    : default(decimal),
            UnitsInStock = product.UnitsInStock.HasValue ? product.UnitsInStock.Value : default(short),
            Discontinued = product.Discontinued
        });
}

最后是网格的DataSource配置:

.DataSource(d => d
    .SignalR()
    .AutoSync(true)
    .Transport(tr => tr
        .Promise("hubStart")
        .Hub("hub")
        .Client(c => c.Read("read").Create("create").Update("update").Destroy("destroy"))
        .Server(s => s.Read("read").Create("create").Update("update").Destroy("destroy"))
    )
    .ServerFiltering(true)
    .Filter(f => f.Add(m => m.UnitPrice).IsEqualTo(10))
    .ServerPaging(true)
    .PageSize(10)
    .Schema(s => s
        .Data("Data")
        .Total("Total")
        .Aggregates("Aggregates")
        .Model(m =>
        {
            m.Id(e => e.ProductID);
            m.Field(e => e.ProductID).Editable(false);
        })
    )
)

允许按网格视图模型的部分的任何字段进行排序、分页和过滤。所以只要你的类别id

是网格视图模型的一个属性,并且网格被配置为能够通过该字段进行过滤,这个方法应该可以工作。

最新更新