Ceci est ma partie du Code de la vue appelée index
asp.net mvc si d'autre ne fonctionne pas en vue
<div class="box-body">
@{ Html.RenderAction("_BlogsGrid",new {country=""});}
</div>
...
...
<script>
$("#SelectedCountry").change(function() {
var selectedCountry = $(this).val();
$.ajax({
url: '@Url.Action("_BlogsGrid","Blog")' + '?country=' + selectedCountry,
sucess: function(xhr, data) {
console.log('sucess');
},
error: function (err) {
console.log(err);
}
});
});
</script>
Voici le code d'action du contrôleur
public ActionResult _BlogsGrid(string country)
{
var blogs = _blogService.GetBlogWithCountryName(country).ToList();
var blogsList = BlogMapper.ToBlogIndex(blogs);
return PartialView(blogsList);
}
et voici _BlogsGrid vue
@model Blog.BlogsList
<div class="pull-right">
@Html.DropDownListFor(m => m.SelectedCountry, new SelectList(Model.CountriesList), "Select a country", new { @class = "form-control" })
</div>
<br />
<br />
@if (Model.Blogs.Count == 0)
{
<div class="box-group">
<h4>Sorry we couldn't find any blog related to the country you asked for.</h4>
@Html.DisplayText("Hello world!")
</div>
}
else
{
<div class="box-group" id="accordion">
@foreach (var blog in Model.Blogs)
{
@*Some code*@
}
</div>
}
chose est quand je le charge la première fois everythi ng fonctionne très bien, la méthode des contrôleurs est touché et tous les blogs se charge c'est ainsi le point de vue semble
mais quand je sélectionne un pays dans la liste déroulante et il n'y a pas de blogs correspondant à ce pays
il frappe la condition if (mettre un point d'arrêt dans la vue je vérifie si la condition est exécutée ou sinon la condition est en cours d'exécution, et passe par if condition) dans la vue (qui est une vue partielle) mais le contenu de " si "n'est pas chargé dans le navigateur. Je reçois toujours le même contenu qu'avant. Une idée de pourquoi mon contenu n'est pas mis à jour?
Mise à jour:
<div id="grid" class="box-body">
@{ Html.RenderAction("_BlogsGrid",new {country=""});}
</div>
<script>
$("#SelectedCountry").change(function() {
var selectedCountry = $(this).val();
$.ajax({
url: '@Url.Action("_BlogsGrid","Blog")' + '?country=' + selectedCountry,
sucess: function (data) {
$('#grid').html(data);
},
error: function (err) {
console.log(err);
}
});
});
</script>
Mais encore mon div n'est pas mise à jour.
Je ne vois pas de code qui mettrait à jour le contenu. Votre appel ajax fait simplement un 'console.log' de toute façon, ne faisant rien pour mettre à jour la page. –
que faites-vous dans le rappel ajax 'sucess'. Est-ce le code factice pour ce post ou le code actuel? – adiga
Votre fonction ajax se déclenche lorsque l'élément dont l'identifiant est "SelectedCountry" est modifié, ce que vous avez oublié de placer dans vos paramètres de balise de sélection, donc il doit être écrit comme @ Html.DropDownListFor (m => m.SelectedCountry, new SelectList (Model.CountriesList), "Sélectionner un pays", nouveau {@class = "contrôle-de-formulaire", id = "SelectedCountry"}) ' – Tiramonium