using viewbag with jquery - asp.net mvc 3

bobek picture bobek · Oct 26, 2011 · Viewed 52.6k times · Source

I have a ViewBag.IsLocal set to true in controller. I would like to use jquery to check the ViewBag value and display an alert.

Code:

if(@ViewBag.IsLocal == true)
{
alert("yeah");
}

I never get the alert. When I use Firebug to see the value of ViewBag it's True ( with capital T). Do I have to do something like == 'True'? I tried it all and none of that worked.

Thank you for help.

H

Answer

Darin Dimitrov picture Darin Dimitrov · Oct 26, 2011

Assuming you have set the IsLocal property to a boolean value in your controller action:

public ActionResult Index()
{
    ViewBag.IsLocal = true;
    return View();
}

you could do this on the view:

<script type="text/javascript">
    @if(ViewBag.IsLocal)
    {
        <text>alert("yeah");</text>
    }
</script>

And please don't use ViewBag/ViewData. Use view models and strongly typed views.

So here's a better approach that I prefer. You could JSON serialize your view model into a javascript variable and then deal with it. Like this:

@model MyViewModel

<script type="text/javascript">
    var model = @Html.Raw(Json.Encode(Model));
    // at this stage model is a javascript variable containing
    // your server side view model so you could manipulate it as you wish
    if(model.IsLocal)
    {
        alert("hello " + model.FirstName);
    }
</script>

Obviously if you don't need your entire view model you could JSON serialize only a subset of it => only the part that will be needed by client scripts.