在MVC应用程序中的操作之间传递保存确认消息

时间:2011-10-31 00:21:38

标签: .net asp.net-mvc

我想在保存时在表单顶部显示“保存成功”消息。我遇到的问题是,当我保存它时,它正在执行POST / Redirect / GET,因此我保存的操作不是我从中返回视图的操作。

我试图在POST操作中使用ViewData,但是由于重定向它是跨越请求所以当它在GET时清除ViewData字典。

有关传递确认信息并将其存储以便在视图中轻松访问的最佳方式的任何想法?

3 个答案:

答案 0 :(得分:1)

请看这篇文章http://kazimanzurrashid.com/posts/adding-rails-like-flash-message-in-asp-dot-net-mvc

也许你会找到其他一些有用的实用程序

答案 1 :(得分:1)

每当应用PRG模式时使用TempData字典。例如,你可以这样做:

控制器:

TempData["SuccessMessage"] = "Save Successful";

查看:

@if (! String.IsNullOrEmpty(TempData["SuccessMessage"]))
{
  <div class="success">
    <p> @TempData["SuccessMessage"] </p>
  </div>
}

在整个应用程序中使用此功能的最佳方法是编写局部视图。然后,您只需要在布局中调用局部视图并在操作中设置消息。

检查这些答案,可能有用:

答案 2 :(得分:1)

我使用强类型视图,并尽可能避免通过TempData或ViewBag传递任何信息。

所以,我会在包含该消息的视图模型中添加一个字符串,以及需要向View指示是否应该显示该消息所需的任何标志。

您没有为您的操作,视图或模型提供任何示例代码,因此我没有任何编辑作为示例。这里有一些模糊的准系统代码:

<强>模型

public class ViewModel {
    // Whatever things you would normally have in your view model here
    ...

    public string SuccessMessage { get; set; }
    public bool ShowSuccessMessage { get; set; }
}

<强>动作

public ActionResult HandleTheForm( ViewModel theModel ) {
    var newModel = new ViewModel();

    //Do whatever stuff you need to do to process the form
    ...

    newModel.SuccessMessage = "The operation succeeded.";
    newModel.ShowSuccessMessage = true;

    return View( newModel );
}

查看

@model ViewModel

@if( Model.ShowSuccessMessage ) {
    <span class="success">@Model.SuccessMessage</span><br />
}