Mi problema era que los usuarios finales comenzaban a escribir en un cuadro de texto y recibían sugerencias de autocompletar (ACP) y actualizaban el control de llamadas si se seleccionaba una sugerencia, ya que el ACP está diseñado de forma predeterminada. Sin embargo, también necesitaba actualizar muchos otros controles (cuadros de texto, DropDowns, etc.) con datos específicos de la selección del usuario final. He estado tratando de encontrar una solución elegante al problema y creo que vale la pena compartir la que desarrollé y, con suerte, le ahorrará al menos algo de tiempo.
WebMethod (SampleWM.aspx):
PROPÓSITO:
- Para capturar los resultados del procedimiento almacenado de SQL Server y devolverlos como una cadena JSON al llamador AJAX
NOTAS:
- Data.GetDataTableFromSP (): es una función personalizada que devuelve un DataTable a partir de los resultados de un procedimiento almacenado
- <System.Web.Services.WebMethod (EnableSession: = True)> _
- Función pública compartida GetAutoCompleteData (ByVal QueryFilterAs String) Como cadena
//Call to custom function to return SP results as a DataTable
// DataTable will consist of Field0 - Field5
Dim params As ArrayList = New ArrayList
params.Add("@QueryFilter|" & QueryFilter)
Dim dt As DataTable = Data.GetDataTableFromSP("AutoComplete", params, [ConnStr])
//Create a StringBuilder Obj to hold the JSON
//IE: [{"Field0":"0","Field1":"Test","Field2":"Jason","Field3":"Smith","Field4":"32","Field5":"888-555-1212"},{"Field0":"1","Field1":"Test2","Field2":"Jane","Field3":"Doe","Field4":"25","Field5":"888-555-1414"}]
Dim jStr As StringBuilder = New StringBuilder
//Loop the DataTable and convert row into JSON String
If dt.Rows.Count > 0 Then
jStr.Append("[")
Dim RowCnt As Integer = 1
For Each r As DataRow In dt.Rows
jStr.Append("{")
Dim ColCnt As Integer = 0
For Each c As DataColumn In dt.Columns
If ColCnt = 0 Then
jStr.Append("""" & c.ColumnName & """:""" & r(c.ColumnName) & """")
Else
jStr.Append(",""" & c.ColumnName & """:""" & r(c.ColumnName) & """")
End If
ColCnt += 1
Next
If Not RowCnt = dt.Rows.Count Then
jStr.Append("},")
Else
jStr.Append("}")
End If
RowCnt += 1
Next
jStr.Append("]")
End If
//Return JSON to WebMethod Caller
Return jStr.ToString
Autocompletar jQuery (AutoComplete.aspx):
- PROPÓSITO:
- Realice la solicitud Ajax al WebMethod y luego maneje la respuesta
$(function() {
$("#LookUp").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "SampleWM.aspx/GetAutoCompleteData",
dataType: "json",
data:'{QueryFilter: "' + request.term + '"}',
success: function (data) {
response($.map($.parseJSON(data.d), function (item) {
var AC = new Object();
AC.label = item.Field0;
AC.value = item.Field1;
AC.FirstName = item.Field2;
AC.LastName = item.Field3;
AC.Age = item.Field4;
AC.Phone = item.Field5;
return AC
}));
}
});
},
minLength: 3,
select: function (event, ui) {
$("#txtFirstName").val(ui.item.FirstName);
$("#txtLastName").val(ui.item.LastName);
$("#ddlAge").val(ui.item.Age);
$("#txtPhone").val(ui.item.Phone);
}
});
});