Le bogue concerne le cours ASP.NET MVC et dans la partie "Un soupçon d'Ajax" > "Les formulaires asynchrones".
Etapes de reproduction du bogue:
1.Lancer la page de recherche via l'action Recherche du Controller Restaurant => La page Recherche s'affiche ainsi que la vue partielle ResultatsRecherche.
2. Renseigner la zone de texte et cliquer sur le bouton de recherche => La page s'actualise et affiche SEULEMENT la vue partielle.
Recherche.cshtml :
@model ChoixResto.ViewModels.RechercheViewModel
@{
ViewBag.Title = "Chercher un restaurant";
}
@*@using (Html.BeginForm("Recherche", "Restaurant", FormMethod.Get))*@
@using (Ajax.BeginForm("ResultatsRecherche", new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "resultats",
OnFailure = "ErreurRecherche",
LoadingElementId = "chargement"
}))
{
@Html.TextBoxFor(m => m.Recherche);
<img id="chargement" src="~/Content/Images/ajax-loader.gif" style="display: none" alt="Chargement en cours..." />
<input type="submit" value="Rechercher" />
<p>Vue principale : @DateTime.Now.ToLongTimeString()</p>
<div id="resultats">
@{ Html.RenderAction("ResultatsRecherche", new { rechercheViewModel = Model }); }
</div>
}
@section scripts{
<script type="text/javascript" src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script type="text/javascript">
function ErreurRecherche() {
$("#resultats").html("Une erreur s'est produite lors de la recherche, veuillez réessayer ...");
}
</script>
}
ResultatsRecherche.cshtml :
@model ChoixResto.ViewModels.RechercheViewModel
<p>Vue partielle : @DateTime.Now.ToLongTimeString()</p>
<p>Résultats de la recherche</p>
@if (Model.ListeDesRestos.Count == 0)
{
<p>Pas de résultat</p>
}
else
{
<table>
<tr>
<th>Nom</th>
<th>Téléphone</th>
</tr>
@foreach (var resto in Model.ListeDesRestos)
{
<tr>
<td>@resto.Nom</td>
<td>@resto.Telephone</td>
</tr>
}
</table>
}
RestaurantController.cs :
public ActionResult Recherche(RechercheViewModel rechercheViewModel)
{
//if (!string.IsNullOrWhiteSpace(rechercheViewModel.Recherche))
// rechercheViewModel.ListeDesRestos = dal.ObtientTousLesRestaurants().Where(r => r.Nom.IndexOf(rechercheViewModel.Recherche, StringComparison.CurrentCultureIgnoreCase) >= 0).ToList();
//else
// rechercheViewModel.ListeDesRestos = new List<Resto>();
return View(rechercheViewModel);
}
public ActionResult ResultatsRecherche(RechercheViewModel rechercheViewModel)
{
if (!string.IsNullOrWhiteSpace(rechercheViewModel.Recherche))
{
rechercheViewModel.ListeDesRestos = dal.ObtientTousLesRestaurants().Where(r => r.Nom.IndexOf(rechercheViewModel.Recherche, StringComparison.CurrentCultureIgnoreCase) >= 0).ToList();
//Thread.Sleep(1500); //Pour afficher plus longtemps l'image gif du loading durant la recherche.
}
else
rechercheViewModel.ListeDesRestos = new List<Resto>();
return PartialView(rechercheViewModel);
}
Si vous ne réussissez pas du premier coup, appelez ça "version 1.0".
Bon les amis j'ai trouvé d'où ça vient. Et comme d'habitude c'est facile à corriger :-D En fait il manque le script jquery. Pour cela ajouter simplement :
dans le layout du site ou au pire dans la section scripts de Recherche.cshtml
Si vous ne réussissez pas du premier coup, appelez ça "version 1.0".
Bogue concernant le cours ASP.NET MVC
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.