如何在重定向到ASP MVC中的另一个页面后保持Toastr Notification生效

时间:2017-11-30 13:15:36

标签: javascript c# asp.net asp.net-mvc toastr

我正在开发一个ASP MVC 5应用程序,我正在向Toast的Notifaction显示一个问题。

更新用户信息后,会出现Toast通知,以确认操作是否成功。

不幸的是,在加载下一页后,它会很快消失(在2秒内)。我认为这是由于使用服务器端代码(在这种情况下为C#),整个页面重新加载,包括javascript文件。这就是为什么toastr也消失了。

有没有办法让它长一点?

我试图将必要的信息传递到下一页,以便第二页知道显示toastr而不是page1,但它不起作用。

这是代码的片段:

查看:

 @using (Html.BeginForm("Edit", "Client", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
    {
        <input type="submit" value="Save" class="btn btn-default" onclick="Update()">
    }

        <script src="/template/web/js/jquery-2.2.3.min.js"></script>
        <script src="~/Scripts/toastr.js"></script>
        <script>

            function Update() {
                toastr.success("Your infos are updated with succes !");
            }
        </script>

控制器:

[HttpPost]
    public ActionResult Edit(int id, Client cmodel)
    {
        try
        {

                ClientManagement cdb = new ClientManagement();
            if (cdb.UpdateDetails(cmodel))
            {
                ViewBag.Message = "Client Details Edited Successfully";
            }

            return RedirectToAction("Profil");
        }
        catch
        {
           return View();
        }
    }

Profil:

 public ActionResult Profil()
    {
        ClientManagement dbhandle = new ClientManagement();
        ViewBag.Message = TempData["Message"];
        return View(dbhandle.GetClientsInfo());
    }

在View Profil中(页面的底部):

 <link href="~/Content/toastr.min.css" rel="stylesheet" />
script src="~/scripts/toastr.js"></script>
        <script src="~/scripts/toastr.min.js"></script>

     @if (ViewBag.Message != null)
    {
        <script type="text/javascript">toastr.success("@ViewBag.Message");</script>
    }

2 个答案:

答案 0 :(得分:1)

如果您想将 一次性消息 从操作方法传递到其他操作方法,则需要使用 TempData

[HttpPost]
public ActionResult Edit(int id, Client cmodel)
{
   try
   {
      ClientManagement cdb = new ClientManagement();
      if (cdb.UpdateDetails(cmodel))
      {
         TempData["Message"] = "Client Details Edited Successfully";
      }
      return RedirectToAction("Profil");
   }
   catch
   {
      return View(cmodel);
   }
}

然后,您可以在操作方法或视图中的下一页检索它。请注意,在您阅读之后,它会在请求结束时清除。

<强> Profil.cshtml

@if (TempData["Message"] != null)
{
   <script type="text/javascript">toastr.success("@TempData["Message"]");</script>
}

更新

enter image description here

以上代码有效。如果您使用默认的ASP.NET MVC布局,请确保将脚本放在 Scripts 部分中,以便在jQuery之后呈现。

@section Scripts {
    <script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" rel="stylesheet" />
    @if (TempData["Message"] != null)
    {
        <script type="text/javascript">toastr.success("@TempData["Message"]");</script>
    }
}

仅供参考:如果您在其他地方使用toastr,您可能需要考虑使用其他脚本和样式捆绑和缩小它们。

答案 1 :(得分:0)

如果您不需要重定向到“Profil”,那么我同意您可以使用Ajax,并且在success回调中您可以显示您的toastr。如果您需要重定向,则可以像您一样设置ViewBag.Message,然后执行类似

的操作
@if (ViewBag.Message != null)
{
<script type="text/javascript">toastr.success("@ViewBag.Message");</script>
}