MVC3 передает сообщения от одного контроллера другому представлению и / или контроллеру - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть веб-приложение MVC3 C # .Net. который имеет функцию импорта из Excel. Эта функция выполняется в методе импорта контроллера скорости. Это просматривается в представлении Оценить / Импорт. При импорте некоторые строки успешны, некоторые нет. Я собираю ошибки в массив string []. Импорт считается успешным, если одна или несколько строк успешно импортированы, поэтому приложение возвращается к представлению «Редактирование предложения». Я хочу передать информационные ошибки обратно в представление редактирования предложения для отображения. Любые идеи, как это сделать?

1 Ответ

3 голосов
/ 09 февраля 2012

Есть несколько способов.

TempData

Это доступно в вашем контроллере. 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>
...