Wie die Rückkehr aus einer Json-label/Wert-paar von C# - Controller-Aktion für jQuery AutoComplete
Brauche ich zum erstellen eines jQuery-Autocomplete-textbox, bekommt eine Liste mit Namen aus der DB, und wenn ausgewählt, sendet der Benutzer auf die entsprechende Seite verlinken.
Ich versuche, etwas zu tun, genau wie dieser post: Brand einer controller-action von einem jQuery-Autocomplete-Auswahl
Die Lösung macht Sinn, und die klicken und die Umleitung funktioniert, aber ich weiß nicht, wie die Rückkehr der mehr als nur eine string-Liste von Namen.
Aktuellen controller-code (Codeausschnitt):
List<string> Names = new List<string>();
foreach (Child c in listfromDB)
{
Names.Add(c.Name);
//childNames.Add(new KeyValuePair<string, int>(c.Name, c.ID));
}
return Json(Names);
Den KeyValuePair
schien nicht zu funktionieren. Wie erstelle ich ein object-array statt?
Mein jQuery-code:
$(document).ready(function () {
$("#find-child-box").autocomplete({
source: function (request, response) {
//define a function to call your Action (assuming UserController)
$.ajax({
url: '/Admin/AutoCompleteMyChildren', type: "POST", dataType: "json",
//query will be the param used by your action method
data: { query: request.term },
success: function (data) {
response($.map(data, function (item) {
return { label: item, value: item };
}))
}
})
},
minLength: 1, //require at least one character from the user
select: function(event, ui) {
alert('mom');
window.location.href = ui.item.value;
}
});
});
- Was willst du den zurück, wenn nicht eine Liste<string>?
- Ich möchte Json zurückgeben, dass die Autocomplete-plugin akzeptiert, so dass ich ein string (Name) und leiten den Benutzer auf der Basis der ID (int).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich, AutoVervollständigen funktioniert gut mit einer Quelle, die gibt nur ein array von strings. Dies sollte funktionieren gut für Sie, ohne änderungen an Ihren controller-action:
JavaScript:
Überprüfen Sie die Registerkarte übersicht des jQueryUI AutoVervollständigen, um zu sehen, welche Art von Daten das widget erwartet.
Pro Ihren Kommentar:
Als @Alex deutet an, Sie haben Sie zu ändern, die Daten der controller-Aktion. Könnten Sie das richtige Objekt-array mit so etwas wie:
Sollte erzeugt JSON so Aussehen:
Die AutoVervollständigen verwenden können, richtig. Dann, zu jeder Zeit
ui.item
zur Verfügung innerhalb des autocomplete-Ereignis-Handler (select
zum Beispiel), Sie sollten in der Lage sein, um Zugriffui.item.ID
.success: function (data) { console.log('success'); response(data); }
, sehen Sie die Nachricht protokolliert?success
Teil mitsuccess: function (data) { response(data); }
- und es funktionierte! Ich dachte, es würde die Anzeige der ID, sowie name, aber das ist es nicht. Danke!Versuchen, erstellen einer Liste, in der Ihre Kind geben
Werden Sie wahrscheinlich benötigen, ot revist Ihr aus dem Ende-code als Json wird anders sein.
Wenn Sie nicht möchten, dass alle Eigenschaften des Kindes aus der DB , dann erstellen Sie eine benutzerdefinierte Klasse, und fügen Sie, was Sie wollen.
Möglicherweise müssen Sie massage die syntax, um es zu arbeiten, oder fügen Sie einige Referenzen. Ich ermutige Sie, schauen Sie in LINQ.