使用select2和ajax调用asp.Net服务自定义参数

时间:2015-11-18 15:07:19

标签: jquery asp.net ajax jquery-select2

我想要使用select2 jQuery插件,并希望使用自动完成功能从ajax调用到aspx.net WebMethod

我的问题是如何在我的ajax调用中使用该术语进行搜索。我试过这个并且它有效 JavaScript代码:

$(".js-example-tags").select2({
            ajax: {
                dataType: "json",
                type: "POST",
                async: true,
                contentType: "application/json; charset=utf-8",
                url: "Code/Services/Dashboard/DashboardService.asmx/AccessRemoteData?",
                dataFilter: function(data) {
                    var msg = eval('(' + data + ')');
                    if (msg.hasOwnProperty('d'))
                        return msg.d;
                    else
                        return msg;
                },
                data:  { p_Term: 'd', p_Operator: 'StartsWith', p_LayoutName: layoutName } ,
                processResults: function (data) {
                         return {
                            results: data.items,
                            };
                        },
                        delay: 250,
                error: function() {
                    HideWaitMe();
                    alert("An error occurred");
                }
            }
    });

WebMethod代码:

    <WebMethod(EnableSession:=True)>
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XmlSerializeString:=False)>
    Public Function AccessRemoteData(p_Term As String, p_Operator As String, p_LayoutName As String) As String

        Dim serialiser As New JavaScriptSerializer()
        Dim listNode As Items
        Try
            Dim tableKey As Long = m_SqlCo.GetLayout(p_LayoutName).TableKey
            listNode = m_DashboardManager.SearchRlinkNames(p_Operator, tableKey, p_Term)
        Catch ex As Exception
            Dim msg As New TError(Nothing, "Error", TSz.MsgLevelEnum.ErrorLevel, TSz.MsgTypeEnum.OtherType, "SearchService.SearchInFieldStatistics " & "An error occured while loading species", True)
            WriteLog(msg)
            'response.Success = False
            SessionStateManager.TitleMessage = "Error"
            SessionStateManager.InfoMessage = String.Format("An error occurred while loading list of names. Message:{0}", ex.Message)
            'response.Url = "BioloMicsInfo.aspx"
            SessionStateManager.GoToLoginPage = False
            Return serialiser.Serialize(False)
        End Try

        Return JsonConvert.SerializeObject(listNode)

    End Function

它可以工作,但我的问题是当我想使用与文档中相同的内容时:

data: function (params) {
    var aa = {
        //term: params.term
        p_Term: params.term, // search term
        p_Operator: 'StartsWith',
        p_LayoutName: layoutName
    };
    return aa;
},

我的请求中有错误

  

例外:System.ArgumentException

     

消息:Primitive JSON non valide : p_Operator.

     

stackstrace:`àSystem.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()

     

àSystem.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)

     

àSystem.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input,Int32 depthLimit,JavaScriptSerializer serializer)

     

àSystem.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer,String input,Type type,Int32 depthLimit)

     

àSystem.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)

     

àSystem.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context,JavaScriptSerializer serializer)

     

àSystem.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData,HttpContext context)

     

àSystem.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)`

你能帮我解决一下我的问题吗?因为我不知道如何获取输入字符串以将其传递给我的服务以返回数据。

1 个答案:

答案 0 :(得分:0)

我不知道如何解释它,但是当我把它改成

data: function (params) {
                            var aa = {
                                //term: params.term
                                p_Term: params.term, // search term
                                p_Operator: 'StartsWith',
                                p_LayoutName: layoutName
                            };
                            return JSON.stringify(aa);
                            },

所以添加了json.stringify它没有添加任何问题

minimumInputLength: 1