Comment actualiser une partie seulement de la page d'Index en MVC 5?
La page d'Index contient deux vues partielles. L'un est pour l'utilisateur de saisir les critères de recherche, l'autre pour afficher les résultats.
Comment mettre à jour les données dans la vue des Résultats seulement ?
Je suis en utilisant MVC 5 et Rasoir. J'ai vu quelques exemples sur ce, principalement à l'aide d'ajax et jquery. Je me demande quelle serait la meilleure (préférez le plus facile) solution pour ce
//INDEX DE LA VUE:
<div id="div_Search">
@{Html.RenderPartial("~/Views/Shared/Search.cshtml", ViewBag.Model_Search );}
</div>
<div id="div_Results">
@{Html.RenderPartial("~/Views/Shared/Results.cshtml", ViewBag.Model_Results );}
</div>
//HOME CONTROLLER
public de la classe HomeController: Contrôleur de
{
MainContextDB db = new MainContextDB();
public ActionResult Index()
{
//Code to initialize ViewBag.Model_Search, etc...
....
//Code to initialize ViewBag.Model_Results, etc... (Values empty at startup)
....
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetResults([Bind(Include = "DropOffLoc,DropOffDate,PickUpDate")] Search search)
{
//Retrieve results using the search parameters, etc...
....
//THIS RETURNS THE VIEW WITH THE DATA, BUT IN A SEPARATE PAGE (AS EXPECTED)
return View("~/Views/Shared/Results.cshtml", results);
//THIS RETURNS THE VIEW IN THE MAIN PAGE BUT WITH EMPTY DATA (AS EXPECTED)
return RedirectToAction("Index");
//HOW TO RETURN THE VIEW WITH THE DATA IN THE MAIN PAGE ?
???????
}
}
//C'EST LA RECHERCHE VUE PARTIELLE
@model Models.Results
@using (Html.BeginForm("GetResults", "Home", FormMethod.Post, new { @class = "my-form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="form-group input-group-sm">
@Html.LabelFor(model => model.DropOffLoc)
@Html.DropDownListFor(model => model.DropOffLoc, ViewBag.LocationList as SelectList, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.DropOffLoc)
</div>
<div class="form-group input-group-sm">
@Html.LabelFor(model => model.DropOffDate)
@Html.TextBoxFor(model => model.DropOffDate, new { @class = "form-control datepicker", placeholder = "Enter Drop-off date here..." })
@Html.ValidationMessageFor(model => model.DropOffDate)
</div>
<div class="form-group input-group-sm">
@Html.LabelFor(model => model.PickUpDate)
@Html.TextBoxFor(model => model.PickUpDate, new { @class = "form-control datepicker", placeholder = "Enter Pick-up date here..." })
@Html.ValidationMessageFor(model => model.PickUpDate)
</div>
<div style="text-align: center; margin-top: 10px; margin-bottom: 10px;">
<input type="submit" id="getResults" value="GET RESULTS" class="btn btn-default btn-success" />
</div>
}
Vous devez vous connecter pour publier un commentaire.
Je voudrais mettre un formulaire dans votre recherche partielle. Ensuite, l'action de poste qui, via JQuery, à votre GetResults Action, qui doit retourner:
Puis, dans la réussite de rappel de votre JQuery post, cracher les résultats retournés à votre $("#div_Results") comme suit:
Sauf si j'ai une faute de frappe ou quelque chose, cela devrait fonctionner. Vous aurez besoin de le remplacer, le sélectionneur de formulaire avec l'Id de votre balise de formulaire.
si cette question a une réponse déjà, je pensais que j'allais poster une approche alternative qui serait aussi travailler. Cette approche utilise la même méthode d'action et vérifie uniquement si la Demande est un appel Ajax qui alors ne remplace une partie du corps. Voici le code correspondant uniquement.
//Le formulaire de recherche
//Partie de la Vue
Maintenant ici est l'Indice de la méthode d'action, si la Demande est une AjaxRequest, il renvoie une Vue Partielle qui remplace le contenu du div avec l'id de mes posts. Si la Demande n'est pas une requête Ajax puis il charge l'ensemble de la Vue.
Espère que cela aide quelqu'un.
Ajax.BeginForm()
est hors de portéemultiple search criteria/input
, dates comme ce lien? sur le côté gauche, case à cocher, liste déroulante, etc à l'aide de votreAjaxified approach
. Aussi, 2) sur le retour en ajoutant un pur HTML de la table de données ou de quoi sommes-nous ajouter, la totalité du formulaire?Vous, en fait, plus besoin d'utiliser AJAX.
La meilleure approche, comme je le vois, est d'avoir une vue partielle et émettre un AJAX Load (jQuery.chargement de jQuery) pour elle.