Mein Problem war, dass Endbenutzer anfingen, ein Textfeld einzugeben, Vorschläge für die automatische Vervollständigung (ACP) zu erhalten und die Anrufsteuerung zu aktualisieren, wenn ein Vorschlag ausgewählt wurde, da der ACP standardmäßig entworfen wurde. Ich musste jedoch auch mehrere andere Steuerelemente (Textfelder, DropDowns usw.) mit Daten aktualisieren, die für die Auswahl des Endbenutzers spezifisch sind. Ich habe versucht, eine elegante Lösung für das Problem zu finden, und ich bin der Meinung, dass die von mir entwickelte Lösung es wert ist, geteilt zu werden, und ich hoffe, dass Sie zumindest einige Zeit sparen.
WebMethod (SampleWM.aspx):
ZWECK:
- So erfassen Sie die Ergebnisse der gespeicherten SQL Server-Prozedur und geben sie als JSON-Zeichenfolge an den AJAX-Aufrufer zurück
ANMERKUNGEN:
- Data.GetDataTableFromSP () - Ist eine benutzerdefinierte Funktion, die eine DataTable aus den Ergebnissen einer gespeicherten Prozedur zurückgibt
- <System.Web.Services.WebMethod (EnableSession: = True)> _
- Öffentliche gemeinsame Funktion GetAutoCompleteData (ByVal QueryFilterAs String) As String
//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
AutoComplete jQuery (AutoComplete.aspx):
- ZWECK:
- Führen Sie die Ajax-Anforderung an die WebMethod aus und verarbeiten Sie dann die Antwort
$(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();
//autocomplete default values REQUIRED
AC.label = item.Field0;
AC.value = item.Field1;
//extend values
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);
}
});
});