У меня есть представление, в котором я хочу выполнить различные действия с элементами в каждой строке таблицы, например, (например, ~/Views/Thing/Manage.aspx
):
<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>
<% } %>
В моем ThingController
есть функции, подобные следующим:
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");
}
В большинстве случаев это работает нормально. Проблема в том, что если ThingService.SetEnabled
выдает ошибку, я хочу, чтобы ошибка отображалась в верхней части таблицы. Я попробовал несколько вещей с Html.ValidationSummary()
на странице, но не могу заставить его работать.
Обратите внимание, что я не хочу отправлять пользователя на отдельную страницу, чтобы сделать это, и я пытаюсь сделать это без использования JavaScript.
Собираюсь ли я показать свой стол наилучшим образом? Как мне отобразить ошибки так, как я хочу? Я в конечном итоге с 40 небольших форм на странице. Этот подход в основном взят из этой статьи, но он не обрабатывает ошибки так, как мне нужно.
Кто-нибудь принимает?
Решено благодаря @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");
}
Тогда просто небольшая форма для ValidationSummary в верхней части моей таблицы.
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(false) %>
<% } %>
Спасибо!