У меня есть веб-приложение MVC3 С#.Net. который имеет функцию импорта из Excel. Эта функция выполняется в методе Import контроллера Rate. Он отображается в представлении «Скорость/импорт». При импорте какие-то строки проходят успешно, какие-то нет. Я собираю ошибки в массив string[]. Импорт считается успешным, если одна или несколько строк были успешно импортированы, поэтому приложение возвращается к представлению «Редактирование предложения». Я хочу передать информационные ошибки обратно в представление редактирования предложения для отображения. Любые идеи, как это сделать?
MVC3 передает сообщения от одного контроллера к другому представлению и/или контроллеру
comment
Когда приложение возвращается к редактированию предложения, вы имеете в виду, что выполняете перенаправление после отправки формы? Если это так, единственное место, где вы сможете хранить информацию, — это база данных (передача идентификатора другому контроллеру для поиска строк), сеанс или файл cookie. Жизненный цикл ViewBag/ViewData заканчивается вместе с запросом. Перенаправление создает новый запрос из браузера.
- person Nick Bork   schedule 09.02.2012
Ответы (1)
Есть несколько способов.
Временные данные
Это доступно в вашем контроллере. TempData сохраняется при одном перенаправлении.
public ActionResult Process()
{
// ... Process your rows, get array of errors back ...
TempData["errors"] = errors;
return RedirectToAction("Edit");
}
public ActionResult Edit()
{
var errors = (IEnumerable<string>)TempData["errors"]; // Get the errors back.
return View(errors); // Pass into the view
}
ModelState
Вы можете добавить эти ошибки непосредственно в ModelState, а затем повторно отобразить форму редактирования. Он не сохраняется при перенаправлении.
public ActionResult Process()
{
// ... Process your rows, get array of errors back ...
for(var i = 0; i < errors.Length; i++)
{
ModelState.AddModelError("row" + i, errors[i]);
}
// Can't redirect here - ModelState doesn't persist.
return View("Edit");
}
Затем в представлении редактирования просто отобразите сводку проверки:
@Html.ValidationSummary("The following row errors occured:");
Это отобразит этот html. Класс по умолчанию установлен MVC.
<div class="validation-summary-errors">
<span>The following row errors occured:</span>
<ul>
<li>...Error 1...</li>
... Other errors ...
</ul>
</div>
person
Leniency
schedule
09.02.2012
@снисходительность....большое спасибо. Хорошая вещь! Вопрос по ModelState.... как ModelState отображает ошибки? Нужен ли дополнительный код в представлении «Правка»? Спасибо
- person MikeTWebb; 13.02.2012
@MikeTWebb Да, последняя строка,
@Html.ValidationSummary("The following row errors occured:");
, отображает все ошибки в ModelState. Обновлен мой ответ с тем, что это делает.
- person Leniency; 17.02.2012