如何将参数传递给KendoUI DataSource的SignalR Read Opeartion

时间:2016-05-10 09:03:01

标签: c# asp.net-mvc kendo-ui signalr

我正在使用KendoUI DataSource通过SignalR绑定KendoUIScheduler。如何使用signalR绑定将参数传递给数据源的读操作。

我正在使用以下代码:

var hub = $ .connection.schedulerHub;
        var hubStart = $ .connection.hub.start();

    $('#scheduler').kendoScheduler({
        mobile: true,
        height: 600,

        views: [
            'day',
            'week',
            'month',
            'agenda',
            { type: 'timeline', selected: true }
        ],

        timezone: 'Etc/UTC',
        dataSource: {
            type: "signalr",
            push: function (e) {
               alert(e.type);
            },
            autoSync: true,
            transport: {
                signalr: {
                    promise: hubStart,
                    hub: hub,
                    server: {
                        read:"read",
                        update: "update",
                        destroy: "destroy",
                        create: "create"                          

                    },
                    client: {
                        read:"read",
                        update: "update",
                        destroy: "destroy",
                        create: "create"

                    }
                }
            },

            schema: {
                model: {
                    id: 'SchedulerID',
                    fields: {
                        SchedulerID: { type: 'number', from: 'SchedulerID' },
                        start: { type: 'date', from: 'Start' },
                        end: { type: 'date', from: 'End' },                           
                        startTimezone: { from: "StartTimezone" },
                        endTimezone: { from: "EndTimezone" },
                        Title: { from: 'Title' },
                        isAllDay: { type: 'boolean', from: 'IsAllDay' },
                        recurrenceId: { from: "RecurrenceId" },
                        recurrenceException: { from: "RecurrenceException" },
                        recurrenceRule: { from: "RecurrenceRule" },                           
                        Users: { nullable: true, from: 'Users' },

                    },
                }
            }

        },


        group: {
            resources: ['Users'],
            orientation: 'vertical'
        },
        resources: [
            {
                field: 'Users',
                name: 'Users',
                dataSource: Users,
                multiple: false,
                title: 'Users'
            }

        ]
    });

1 个答案:

答案 0 :(得分:2)

我意识到这个问题已经过时了,但我试图找到同样的答案并且没有找到任何明确的解决方案。我确实在其他线程中找到了一些提示导致我找到解决方案的提示,虽然我确定有更好的解决方案(我无法弄清楚如何单独发送参数 - 仅作为一个对象)。

在您的数据源中,使用parameterMap函数放入您想要的任何自定义参数。绑定到WCF(注释代码)时,您可以分离调用的参数,但我无法使用SignalR实现。

type: "signalr",
            transport: {
                parameterMap: function (data, type) {

                    switch (type) {
                        case "read":
                            {
                                // this works
                                var request = {};
                                var chkunsub = $('#chkunsubscribed').is(':checked');
                                request.unsubscribed = chkunsub;
                                request.oKendo = data;
                                return request;
                                // Does not work (separating parameters)
                                //return {
                                //    unsubscribed: chkunsub,
                                //    oKendo: data
                                //};
                            }
                            // Does not work either (separating parameters)
                            //return kendo.stringify({
                            //    unsubscribed: chkunsub ? 1 : 0,
                            //    oKendo: data
                            //});
                    }
                },

请注意,“data”变量包含过滤器,分页,分组等(我绑定到网格,但我认为它与调度程序相同)。

然后在集线器的服务器端,您只需要像这样镜像类结构(我的CKendoGridOptions类具有API中的所有属性,如页面,跳过,过滤器等)。

Public Class EventRequestData
    Public Property unsubscribed As Boolean
    Public Property oKendo As CKendoGridOptions
End Class

' This works
Public Function read(data As EventRequestData) As OrmedReturnData
    Dim oReturn As New OrmedReturnData

    If IsLoggingEnabled() Then
        WriteToEventLog("Hub getevent_item called")
    End If

    Dim oToken As TokenHelper.TokenData = TokenHelper.ValidateToken(New Guid(Context.Request.Cookies("token").Value))
    If oToken.TokenOK = False Then
        oReturn.Success = False
        oReturn.ErrorMessage = ERROR_INVALID_TOKEN
    Else
        Dim oData As New EventItems
        oReturn = oData.Getevent_items(data.unsubscribed, data.oKendo)
    End If

    Return oReturn

End Function

我希望这能帮助那些试图在jQuery和SignalR中使用Kendo将参数传递给读取函数的人。