ASP.NET MVC, jquery autocomplete de la valeur et un champ de texte
contrôleur
public ActionResult Search(string id)
{
id= Request.QueryString["term"];
var routeList = db.Movies.Where(r => r.Title.Contains(id))
.Take(5)
.Select(r => new { id = r.MovieID, label = r.Title, name = "MovieID" });
return Json(routeList, JsonRequestBehavior.AllowGet);
}
Vue:
<input type="hidden" id="MovieID" name="MovieID" />
<input type="text" id="SelectedMovie" value=""/>
<script type="text/javascript" language="javascript">
$("#SelectedMovie").autocomplete({
source: function (request, response) {
$.ajax({
url: "/Transaction/Search", type: "POST", dataType: "json",
data: { id: request.term },
success: function (data) {
response($.map(data, function (item) {
return { label: item.label, value: item.id }; //updated code
}));
}
});
},
select: function (event, ui) {
$("#MovieID").val(ui.item.value);
$("#SelectedMovie").val(ui.item.label);
return false;
}
});
</script>
J'ai une sorte de videostore app. Quand je vais louer un film que j'ai besoin d'un combobox avec les films que j'ai peut sélectionner à l'aide de la saisie semi-automatique.
Aussi exigence est que seul le code (valeur) est enregistrée dans le databas et non le texte lui-même.
EDIT: voici l'intégralité de travail exqample
- Le 1er s'il vous plaît dites-moi si mon contrôleur est OK ? quand je le lance manuellement je n'obtenez pas de résultats , en terme de recherche (id) est passé comme nulle ??
- Je m'attends à passer
request.term
PASrequest.id
à la$.ajax()
appel.
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes de passage seulement une chaîne à la
Search()
de fonction sur le côté serveur, ledata
éléments que vous êtes en passant par les$.ajax()
appel besoin d'être changé.Laissez-moi savoir si cela fonctionne pour vous/aide!
Votre
.ajax()
appel n'est pas spécifier dans unid
. il n'est pas dans votredata{}
objet, ni est-il dans unquerystring
dans le cadre de l'paramètre de l'url (l'un et l'autre fonctionne).D'où la valeur null dans votre méthode d'Action.
De toute façon, vous êtes immédiatement sur-l'écriture de la méthode d'identification d'argument avec
Request.QueryString["term"]
. Pourquoi faire??Tout d'abord, vous devez utiliser la déclaration suivante de la valeur de votre fonction:
Selon la la documentation vous devez retourner les objets avec
label
etvalue
propriétés (pas deid
de la propriété). Le label est ce que voit l'utilisateur, la valeur est ce qui est affiché sur le serveur.Second, vous passez un
searchText
etmaxResults
dans l'appel Ajax, de sorte que votre méthode d'action devrait avoir deux paramètres:public ActionResult Search(string searchText, int maxResults)
.Pouvez-vous appliquer ces changements et voir si cela fonctionne?