Tung Pham
Tung Pham

Reputation: 599

Toast notifications in ASP.NET MVC 4

I want to display notifications whenever a user click on the "Add to Cart" button using the Toastr plugin. Basically, when a user click on the button, it executes the action "AddToCart" then redirects to the index page. When the page shows up, it checks the TempData value, then shows the notification.

This is the controller:

public ActionResult AddToCart(int id)
    {


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

and the view:

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

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

Update it worked according to @Exception's answer. However, if I use ajax such as:

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

it doesnt work. That may be because of the line:

$(document).ready(function ()

as the page is not reloaded. How can I fix it?

But this doesnt work. Please help. Thanks in advance!

Upvotes: 8

Views: 38828

Answers (4)

Kartikeya Khosla
Kartikeya Khosla

Reputation: 18873

Answer 1:

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

Answer 2:

Although TempData retain its value on one redirect but sometimes it creates problem(and it is recommended to avoid using TempData) in that case you can do as:

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>

Upvotes: 8

Alaa Hamdy
Alaa Hamdy

Reputation: 21

Controller

TempData["message"] = "Added";

View

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

Upvotes: 1

This link might help: https://github.com/fatihBulbul/toastr.Net

Server Side:

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

Client Side :

    <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)

Upvotes: 1

Garik
Garik

Reputation: 31

Try to add in Index Method the ViewBag statement, which contains a TempData variable:

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

Index.cshtml:

@if (ViewBag.message != null)

{

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

}

Upvotes: 1

Related Questions