2017-07-26 4 views
2

J'utilise Select2 4.0.3 dans mon application web .net. J'essaye de charger des données à distance en utilisant un webservice, mais ne fonctionne pas comme prévu.Chargement de données à distance à l'aide de Select2 et Webservice

face Première h d'émission est que la méthode WebService n'est pas appelé et je suis devient une erreur de la console:

System.InvalidOperationException: Missing parameter: text. 
    at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection) 
    at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request) 
    at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 
    at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

J'ai donc essayé de retirer le paremeter de l'appel webservice

<WebMethod()> _ 
Public Function GetDataFromService() As String 

Faire cela la méthode a été déclenchée, mais les éléments du select2 n'ont toujours pas été remplis (capture d'écran jointe enter image description here). Est-ce que quelqu'un peut m'aider à comprendre où je fais une erreur?

Voici les détails:

code Select2 dans le Webform:

$("#ddlEntity").select2({ 
 
     ajax: { 
 
      url: "Service/InvoiceHTMLService.asmx/GetDataFromService", 
 
      type: 'POST', 
 
      delay: 250, 
 
      params: { 
 
       contentType: 'application/json; charset=utf-8' 
 
      }, 
 
      dataType: 'json', 
 
      data: function (term, page) { 
 
       return { 
 
        text: term, 
 
       }; 
 
      }, 
 
      processResults: function (data, params) { 
 
       // parse the results into the format expected by Select2 
 
       // since we are using custom formatting functions we do not need to 
 
       // alter the remote JSON data, except to indicate that infinite 
 
       // scrolling can be used 
 
       params.page = params.page || 1; 
 

 
       return { 
 
        results: data.items, 
 
        pagination: { 
 
         more: (params.page * 30) < data.total_count 
 
        } 
 
       }; 
 
      }, 
 
      cache: true 
 
     }, 
 
     escapeMarkup: function (markup) { return markup; }, // let our custom formatter work 
 
     minimumInputLength: 1, 
 
     templateResult: formatRepo, // omitted for brevity, see the source of this page 
 
     templateSelection: formatRepoSelection // omitted for brevity, see the source of this page 
 
    });

WebService Method: 
    <WebMethod()> _ 
    Public Function GetDataFromService(text As String) As String 
     Return "{['id':1, 'text':'Test1'],['id':2, 'text':'Test2']}" 
    End Function 

Répondre

0

Essayez cette s'il vous plaît

var fd = new FormData(); 
fd.append("text",term); 
ajax: { 
url: "Service/InvoiceHTMLService.asmx/GetDataFromService", 
type: 'POST', 
delay: 250, 
params: { 
    contentType: 'application/json; charset=utf-8' 
}, 
dataType: 'json', 
data: fd 
... 
0

Je pense que vous n'avez pas créé de modèle pour ce select2. Puisque vous utilisez templateResult et templateSelection, il nécessite un modèle ou vous pouvez supprimer ces deux options.

Pour votre référence: https://select2.github.io/examples.html#templating

Mise à jour:

ils ont changé le rappel de requête de

 data: function (term, page) { 
      return { 
       text: term, 
      }; 
     }, 

dans

data: function (params) { 
    return { 
    q: params.term, // search term 
    page: params.page 
    }; 
}, 
+0

j'ai enlevé les deux options de modèle, encore la fois la problème persiste, ni le webservice n'est appelé, pas les données revenu. – user2561997

+0

oops réponse doit être des objets tableau comme Retour [{'id': 1, 'texte': 'Test1'}, {'id': 2, 'texte': 'Test2'}] –

+0

Je suis en mesure d'obtenir le retour des données, mais le principal problème que j'ai mentionné dans le message est que je ne suis pas en mesure d'obtenir la méthode de service Web appelée avec le paramètre de texte, Si je le laisse vide, cela fonctionne. Mais j'ai besoin du texte tapé comme paramètre, de sorte que je puisse obtenir les données filtrées. – user2561997