MVC3将消息从一个控制器传递到另一个视图和/或控制器

时间:2012-02-09 16:33:38

标签: asp.net-mvc-3 controller message

我有一个MVC3 C#.Net网络应用程序。从Excel函数导入。此功能在速率控制器的导入方法中执行。它在Rate / Import视图中查看。导入时,某些行成功,有些则不成功。我正在将错误收集到string []数组中。如果成功导入一个或多个行,则导入被视为成功,因此应用程序将导航回“投标编辑”视图。我想将信息错误传递回Proposal Edit视图以供显示。任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:3)

有几种方法。

<强> 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>