ASP.NET MVC 4 中的 Toast 通知

Posted

技术标签:

【中文标题】ASP.NET MVC 4 中的 Toast 通知【英文标题】:Toast notifications in ASP.NET MVC 4 【发布时间】:2014-10-07 15:54:09 【问题描述】:

我想在用户使用 Toastr 插件单击“添加到购物车”按钮时显示通知。基本上,当用户单击按钮时,它会执行“AddToCart”操作,然后重定向到索引页面。当页面出现时,它会检查 TempData 值,然后显示通知。

这是控制器:

public ActionResult AddToCart(int id)
    


        TempData["message"] = "Added";
        return RedirectToAction("Index");
    

和视图:

@if (TempData["message"] != null)


    <script type="text/javascript">
        $(document).ready(function ()    
            toastr.success('Added')
        )
    </script>                                 

更新 它根据@Exception的回答起作用。但是,如果我使用 ajax,例如:

@Ajax.ActionLink("Add to cart", "AddToCart", "Home", new  id = item.ProductId , new AjaxOptions  UpdateTargetId="abc")

它不起作用。那可能是因为这行:

$(document).ready(function ()

因为页面没有重新加载。 我该如何解决?

但这不起作用。 请帮忙。提前致谢!

【问题讨论】:

查看任何控制台错误.. 没有控制台错误 我会推荐你​​采取html.actionlink..然后你的问题将得到解决.. Html.Actionlink 没问题,但我想使用 Ajax,这样页面就不必像其他网站一样重新加载。 根据您在 AddToCart 操作中的问题,它正在重定向到索引,然后页面也将被重新加载.. 【参考方案1】:

答案 1:

<script type="text/javascript">
    $(document).ready(function ()  
       if('@TempData["message"]' == "Added")
          toastr.success('Added');
       
       else 
    );
</script> 

答案 2:

虽然TempData 在一次重定向中保留其值,但有时会产生问题(建议避免使用TempData),在这种情况下您可以这样做:

public ActionResult AddToCart(int id)

    .........
    return RedirectToAction("Index", new  message="Added" );  //Send Object Route//


public ActionResult Index(string message)

    .........
    if(!string.IsNullOrEmpty(message)) 
       Viewbag.message=message;
    
    return View();


<script type="text/javascript">
    $(document).ready(function ()  
       if('@Viewbag.message' == "Added") 
          toastr.success('Added');
       
       else 
    );
</script>

【讨论】:

是的,有。我设置了一个断点并检查了它。数据已“添加”,但不知何故仍未执行 if 语句中的代码 而不是 "==" 尝试 "===" 并检查..@TungPham 很奇怪。我试图在“toastr.success('Added');”下面添加一行“@TempData["message"]"并在其上设置断点。即使 TempData 为空,它仍然被执行(但没有显示任何内容)。 @@ 我收到一个错误“操作员'!'不能应用于“if(!string.IsNullOrEmpty)”行上“方法组”类型的操作数 好吧好吧。我接受了你的回答。不管怎样,谢谢你帮助我。【参考方案2】:

控制器

TempData["message"] = "Added";

查看

    @section scripts

        <script >
            $(document).ready(function () 
                if ('@TempData["message"]' == "Added") 
                    toastr.success('Action successfully changed....', 'ActionName');
                
                else  
            );
    </script>

【讨论】:

【参考方案3】:

尝试在 Index Method 中添加 ViewBag 语句,其中包含一个 TempData 变量:

....
ViewBag.message = TempData["message"];
....
return View();

Index.cshtml:

@if (ViewBag.message != null)

<script type="text/javascript">
    $(document).ready(function ()    
        toastr.success('Added')
    )
</script>                                 

【讨论】:

【参考方案4】:

此链接可能会有所帮助:https://github.com/fatihBulbul/toastr.Net

服务器端:

public ActionResult Index()
    
        ViewBag.Message =  Notification.Show("Hello World", position: Position.BottomCenter, type: ToastType.Error, timeOut: 7000);
        return View();
    

客户端:

    <script src="//code.jquery.com/jquery-2.2.4.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
    <link href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css" rel="stylesheet" />

     @Html.Raw(ViewBag.Message)

【讨论】:

以上是关于ASP.NET MVC 4 中的 Toast 通知的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net MVC PWA 的推送通知

ASP.NET MVC Azure 应用程序 iOS 推送通知

使用谷歌云消息在 Asp.net Webform 或 mvc 中推送通知

Asp.Net MVC 和 HTML5 PUSH 通知

VS 2015 ASP.NET 4 MVC 5 中的打字稿 - 设置和选择的工作组合是啥?

如何使用 SignalR 从 ASP.NET MVC 3 通知 Web 客户端 MSMQ 任务已完成