【问题标题】:Pass a save confirmation message across actions in an MVC application在 MVC 应用程序中跨操作传递保存确认消息
【发布时间】:2011-10-31 00:21:37
【问题描述】:

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

我曾尝试在 POST 操作中使用 ViewData,但由于重定向是跨请求的,因此当它位于 GET 时,ViewData 字典已被清除。

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

【问题讨论】:

    标签: .net asp.net-mvc


    【解决方案1】:

    只要应用 PRG 模式,就使用 TempData 字典。例如,您可以这样做:

    控制器:

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

    查看:

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

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

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

    【讨论】:

    • 使用 TempData 的好主意,但是我不喜欢您的局部视图的想法,特别是因为您在视图中执行“if”逻辑。相反,我创建了一个名为 DisplayConfirmation() 的 HtmlHelper 来完成这项工作。感谢您的帮助。
    • 您要么在 Views 中执行某种 C# 逻辑,要么在同一枚硬币的另一面的 helper 中生成 HTML
    【解决方案2】:

    看这个帖子http://kazimanzurrashid.com/posts/adding-rails-like-flash-message-in-asp-dot-net-mvc

    也许你会发现一些其他有用的实用程序

    【讨论】:

      【解决方案3】:

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

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

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

      型号

      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 />
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多