Ho un autocomplete extender che funziona con del codice lato client che chiama una funzione lato server marcata come webmethod.
Questo è il codice lato client:
codice:
$("#sceltadd").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "mypage.aspx/SceltaDest",
data: JSON.stringify({ prefixText: request.term, count: 20 }),
dataType: "json",
success: function (output) {
response(output.d);
},
error: function (errormsg) {
alert(errormsg.responseText);
}
});
},
minLength: 4,
select: function (event, ui) {
$("#sceltadd").blur();
}
});
Si vede che invoca la funzione SceltaDest della pagina mypage (ovvero si trova nel codebehind della stessa pagina).
E questo è lato server ilcontenuto della SceltaDest:
codice:
<System.Web.Script.Services.ScriptMethod(), System.Web.Services.WebMethod(EnableSession:=True)> Public Shared Function SceltaDest(ByVal prefixText As String) As List(Of String)
Dim listarisultati = New List(Of String)
.....
Return listarisultati
End Function
PROBLEMA: nel codebehind ho bisogno di ricevere un altro dato per fare quello che mi serve.
Il dato sarebbe in un Hiddenfield solo che non posso leggerlo nel codebehind perchè "il webmethod non può accedere alle risorse della classe.." (o qualcosa di simile).
Allora ho pensato di passarlo passarlo attraverso la funzione client...
Ho provato a fare una cosa simile a questa:
codice:
...
url: "mypage.aspx/SceltaDest",
data: JSON.stringify({ prefixText: request.term + "|" + document.getElementById(Hiddenfield).value, count: 20 }),
dataType: "json",
...
e a recuperarlo dal codebehind facendo lo split di prefixtext sul carattere "|" ma non funzica... pare che non vada proprio più la funzione lato client... (sarebbe bello sapere cosa si pianta ma nei fatti in debug vedo che non entra più nella SceltaDest)
Ci sarà un modo per passare più di un parametro con quella funzione JS?