J'ai écrit ci-dessous. Vérification des outils de développement, je peux voir que le code HTML correct est dans la réponse, sauf que cela ne se charge pas dans la page. Aucune erreur n'apparaît dans la console. Qu'est-ce que je manque? P> EDIT: P> Voici la réponse HTML, j'ai omis l'en-tête et Footer: P> public IActionResult Index(string id)
{
Guid selectedId = Guid.Parse(id);
var vm = new HomeViewModel
{
Manufacturers = context.ManufacturersTable.OrderBy(x => x.Manufacturer).ToList(),
Models = context.ModelsTable.OrderBy(x => x.ModelName).Where(x => x.ManufacturerId == selectedId).ToList(),
}
}
3 Réponses :
sur le rappel de la réussite Ajax, vous êtes itération du sélecteur déroulant. Vous devez itérer sur les données de réponse à la place:
$('#manufacturerDropDown').change(function () { var selected = $(this).val(); $.ajax({ url: '/Home/Index', data: { id: $('#manufacturerDropDown option:selected').val() }, type: "post", cache: false, success: function (data) { alert(data); var modelDropDown = $('#modelDropDown'); modelDropDown.empty(); data.forEach(function (item) { modelDropDown.append( $('<option>', { value: item.value, text: item.text })); }); }, error: function () { alert(xhr.status); alert(thrownError); } }); });
Je reçois que la fonction n'est pas une fonction pour cela, possible en raison du type de données?
Que veux-tu dire? J'utilise JavaScript Array foreach A > Méthode depuis que je suppose que ce que vous obtenez dans la réponse est un tableau. Est-ce que cette hypothèse est incorrecte? Dans ce cas, que recevez-vous de la réponse AJAX?
Modification de la boucle sur
public IActionResult Index(string id) { Guid selectedId = Guid.Parse(id); var vm = new HomeViewModel { Manufacturers = context.ManufacturersTable.OrderBy(x => x.Manufacturer).ToList(), Models = context.ModelsTable.OrderBy(x => x.ModelName).Where(x => x.ManufacturerId == selectedId).ToList(), } return vm; }
Cela génère environ 20 k Options vierges, donc je commence à me demander s'il y a un autre problème quelque part!
@Fulllerprime si vous ajoutez un exemple de données, je pourrais être plus utile
Ce sont des déposés peuplés de tables SQL à l'aide de la liste <> S, c'est ce que vous voulez dire?
@Fulllerprime au lieu d'alerte (données), utilisez console.log (données), voir ce que vous obtenez dans la console et poster à la question
Bien que mérite de mentionner le bon HTML est là aussi, il ne s'agit que de rendu sur la page.
Vous ne devriez pas retourner HTML / View de contrôleur, il devrait s'agir d'une liste de modèles, pouvez-vous poster le code de contrôleur
@Fulllerprime voir la réponse mise à jour pour le contrôleur et le script également
Laissez-nous Continuez cette discussion en chat .
Essayez quelque chose comme ceci:
success: function (data) { alert(data); var modelDropDown = $('#modelDropDown'); var html=""; for(var i=0; i<data.length; i++){ html+="<option value='"+data[i].value+"'>"+data[i].text+"</option>"; } modelDropDown.html(html); }
Pouvez-vous ajouter l'exemple de données?
Vous êtes
chacun () code> n'a pas de sens. Vous êtes en boucle sur les résultats de votre recherche JQuery, qui est un identifiant alors qu'un seul élément et d'essayer d'utiliser des données de soi-même pour vous changer. Vous n'utilisez jamais les données
code>
Le problème n'est pas votre Ajax mais votre jQuery lorsque vous aimez les données. Faire une version minimale du code suffit d'ajouter les données à l'endroit où vous le souhaitez
Votre question est similaire à celle-ci Stackoverflow.com/Questtions/41343215/...
Regardez ici aussi Stackoverflow.com/Questtions/56537153/...