j'ai vue où je veux effectuer différentes actions sur les éléments de chaque ligne d'une table, semblable à ce (en, disons, ~/Views/Thing/Manage.aspx
):montrant des erreurs d'actions dans les vues basées sur des tables
<table>
<% foreach (thing in Model) { %>
<tr>
<td><%: thing.x %></td>
<td>
<% using (Html.BeginForm("SetEnabled", "Thing")) { %>
<%: Html.Hidden("x", thing.x) %>
<%: Html.Hidden("enable", !thing.Enabled) %>
<input type="submit"
value="<%: thing.Enabled ? "Disable" : "Enable" %>" />
<% } %>
</td>
<!-- more tds with similar action forms here, a few per table row -->
</tr>
<% } %>
Dans mon ThingController
, j'ai des fonctions similaires à ce qui suit:
public ActionResult Manage() {
return View(ThingService.GetThings());
}
[HttpPost]
public ActionResult SetEnabled(string x, bool enable) {
try {
ThingService.SetEnabled(x, enable);
} catch (Exception ex) {
ModelState.AddModelError("", ex.Message); // I know this is wrong...
}
return RedirectToAction("Manage");
}
Dans la plupart, cela fonctionne très bien. Le problème est que si ThingService.SetEnabled
renvoie une erreur, je veux être en mesure d'afficher l'erreur en haut de la table. J'ai essayé quelques choses avec Html.ValidationSummary()
dans la page mais je ne peux pas l'obtenir pour fonctionner.
Notez que je ne veux pas envoyer l'utilisateur à une page séparée pour ce faire, et j'essaye de le faire sans utiliser de javascript.
Suis-je en train d'afficher ma table de la meilleure façon? Comment puis-je afficher les erreurs comme je le souhaite? Je finirai avec peut-être 40 petits formulaires sur la page. Cette approche provient en grande partie de l'article this, mais elle ne gère pas les erreurs de la manière dont j'ai besoin.
Tout preneur?
grâce à Solved @Shaharyar:
public ActionResult Manage() {
if (TempData["Error"] != null)
ModelState.AddModelError("", TempData["Error"] as string);
return View(ThingService.GetThings());
}
[HttpPost]
public ActionResult SetEnabled(string x, bool enable) {
try {
ThingService.SetEnabled(x, enable);
} catch (Exception ex) {
TempData["Error"] = ex.Message;
}
return RedirectToAction("Manage");
}
Ensuite, il suffit d'une petite forme pour le ValidationSummary au sommet de ma table.
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(false) %>
<% } %>
Merci!
Merci, ça l'a résolu. Idéal que c'est juste disponible pour la demande actuelle. J'ai ajouté le code que j'ai utilisé pour une réponse séparée. – enashnash
Heureux qu'il vous a aidé! Vous pourriez également avoir modifié votre question originale et ajouté une nouvelle section avec la solution. (comportement préféré sur StackOverflow) ;-) –