我正在开发一个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>
}
答案 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>
}
以上代码有效。如果您使用默认的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>
}