ASP.NET MVC:如何在服务器端处理后显示成功确认消息

Pau*_*lor 26 ajax asp.net-mvc

我需要在ASP.NET MVC应用程序中显示确认数据库更新成功的消息.目前,应用程序仅在发生错误时显示消息(使用ValidationSummary助手).在成功操作时,应用程序当前重定向到导航中的合适点.

目标是:

  • 以适当的方式显示确认消息
  • 在阅读邮件后尽量减少继续操作所需的用户操作
  • 避免额外的帖子/往返以显示消息
  • 最大限度地减少开发工作量,并有可能在应用程序的多个点插入消息

我的偏好是提交按钮附近的某种工具提示类型的消息显示,然后是一个删除消息并在成功后继续现有重定向的机制.

这似乎表明Ajax调用而不是现有的HTTP POST来提交表单.我该怎么做?

Sim*_*tes 54

我会用的 TempData["key"]

这就像ViewData["key"]下一个HttpRequest的数据仍然存在,并在此之后由asp.net自动处理

所以你可以做到这一点.

控制器动作

[HttpPost]
public ActionResult SomePostAction(SomeViewModel vm)
{
   if(ModelState.IsValid) // Is User Input Valid?
   {
       try
       {
           CommitData();
           TempData["UserMessage"] = new MessageVM() { CssClassName = "alert-sucess", Title = "Success!", Message = "Operation Done." };
           return RedirectToAction("Success");
       }
       catch(Exception e)
       {
           TempData["UserMessage"] =  new MessageVM() { CssClassName = "alert-error", Title = "Error!", Message = "Operation Failed." };
           return RedirectToAction("Error");
       }

   }

   return View(vm); // Return View Model with model state errors
}
Run Code Online (Sandbox Code Playgroud)

_Layout.cshtml

<!DOCTYPE html>
   <html>
     <head>

     </head>
     <body>
      @if(TempData["UserMessage"] != null)
      { 
          var message = (MessageVM)TempData["UserMessage"];
          <div class="alert @message.CssClassName">
               <strong>@message.Title</strong> 
               @message.Message
          </div>
      }
          @RenderBody()
     </body>
</html>
Run Code Online (Sandbox Code Playgroud)

更多信息:http://www.devcurry.com/2012/05/what-is-aspnet-mvc-tempdata.html

  • @TempData [“ UserMessage”]。CssClassName(或任何其他内容)给出以下错误:对象不包含CssClassName的定义。是否有一些语法调整可以查找CssClassName? (2认同)

小智 15

在成功的操作中,您只需将成功消息描述存储到ViewBag中,如同

ViewBag.successMessage="Success" 
Run Code Online (Sandbox Code Playgroud)

然后在视图中检查ViewBag值是否为空?通过javascript,如果不为null,则显示Div中的消息

if('@ViewBag.successMessage'!="")
{
   $('#divSuccessMessage').show();
} 
else
{
  $('#divSuccessMessage').hide();
}
Run Code Online (Sandbox Code Playgroud)

页面加载中的默认值隐藏div