Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax ASP.NET MVC:服务器端处理后如何显示成功确认消息_Ajax_Asp.net Mvc - Fatal编程技术网

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

Ajax ASP.NET MVC:服务器端处理后如何显示成功确认消息,ajax,asp.net-mvc,Ajax,Asp.net Mvc,我需要在ASP.NET MVC应用程序中显示一条消息,确认数据库更新成功。当前,应用程序仅在发生错误时显示消息(使用ValidationSummary帮助程序)。操作成功后,应用程序当前将重定向到导航中的适当点 目标是: 以适当的方式显示确认消息 最大限度地减少阅读消息后继续操作所需的用户操作 避免额外的post/往返以显示消息 将开发工作和在应用程序的多个点插入消息的风险降至最低 我的首选是在submit按钮附近显示某种工具提示类型的消息,然后是一种删除消息并在成功后继续现有重定向的机制

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

目标是:

  • 以适当的方式显示确认消息
  • 最大限度地减少阅读消息后继续操作所需的用户操作
  • 避免额外的post/往返以显示消息
  • 将开发工作和在应用程序的多个点插入消息的风险降至最低
我的首选是在submit按钮附近显示某种工具提示类型的消息,然后是一种删除消息并在成功后继续现有重定向的机制


这似乎建议使用Ajax调用而不是现有的HTTP POST来提交表单。我该怎么做呢?

以下链接可能会对您有所帮助(发布链接,因为这需要更好的解释):


如果操作成功,只需将成功消息描述存储到ViewBag中即可 像

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

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

默认页面加载隐藏div

我将使用
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
}
\u 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>

@if(TempData[“UserMessage”]!=null)
{ 
var message=(MessageVM)TempData[“UserMessage”];
@message.Title
@留言,留言
}
@RenderBody()
更多信息:

正如其他人提到的,这是最直接的选择之一。在我看来,常规ASP.NET的主要缺点是它使用会话存储来存储其内容。这意味着您将需要额外的工作才能使其在web场上运行,或者首先需要打开会话

TempData
是一个基于字符串的字典,您可以在其中放入任何内容,并且默认情况下,在以后的任何请求中,只能将其取出一次。在调用
RedirectToAction()
之前,您需要设置消息,并在下一次请求时检查消息并显示它们。通过检索消息,它们将在请求结束时自动删除

作为替代方案,您可以使用cookies在两个请求之间传输消息。基本上,您可以推出自己的解决方案,或者实现通过cookie传输
TempData
内容的定制。由于消息很短,因此对性能的影响最小。请注意,您需要正确保护cookies

我遇到了与您相同的问题,并为此创建了一个名为的解决方案。可以在网上买到。用法很简单:在调用
RedirectToAction()
之前,只需将消息排队,如下所示:

FlashMessage.Confirmation("Your message");
return RedirectToAction("AdminUsers", "Admin");
在您的视图中,可以包含以下语句来呈现任何先前排队的消息:

@Html.RenderFlashMessages()

谢谢,我现在觉得这比我想象的要简单。要在显示成功消息后管理到另一个页面的重定向,我想我可以向message div添加onclick处理程序。我喜欢这样做,因为它让我可以在成功更新后重定向到的页面上显示消息。如果采用这种方法,一个选项是在工具提示类型的面板中显示消息,该面板在预定时间后自动消失,不需要额外的用户操作。就所需的重构而言,它的影响也很小。谢谢我喜欢你的回答,我唯一关心的是重定向到错误。这将阻止用户重新提交他们的帖子。或者这就是我的想法?成功当然会阻止重复的响应,但错误可能需要重新提交。您好@Tod我明白您的观点,但我认为您关心的更多是数据验证。如果用户提交的数据有问题,那么将使用
ModelState.IsValid
处理,然后您可以
返回视图(vm)
我将更新我的答案,使其更清晰。我刚刚开始实现这一点,如果您重定向到两个不同的操作,为什么会有用户消息,假设有两种不同的观点。只需将消息放在视图上。我是MVC的新手,我只是想了解一下。@TempData[“UserMessage”].CssClassName(或.whatever)给出的错误是对象不包含CssClassName的定义。是否有一些语法调整可以查找CssClassName?
@Html.RenderFlashMessages()