utiliser viewbag avec jquery - asp.net mvc 3

j'ai une ViewBag.IsLocal réglé à true dans controller. J'aimerais utiliser jquery pour vérifier la valeur du sac de visualisation et afficher une alerte.

Code:

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

Je ne reçois jamais l'alerte. Quand J'utilise Firebug pour voir la valeur de ViewBag C'est vrai ( avec capital T). Dois-je faire quelque chose comme == 'True'? J'ai tout essayé et aucun n'a fonctionné.

Merci pour votre aide.

H

10
demandé sur Hubert Jarema 2011-10-26 19:42:52

3 réponses

si vous voyez la source sur la page rendue, qu'est-ce qui est inséré à la place de votre nugget de rasoir? Si IsLocal est un type bool, je pense que vous verrez ceci:

@if(True == true)
{
  alert("yeah");
}

la raison en est que true.ToString()True.

dans ce cas, vous devrez faire une comparaison de chaîne de caractères:

if('@ViewBag.IsLocal' == 'True')
{
  alert("yeah");
}
20
répondu Dave Ward 2011-10-26 15:50:50

en supposant que vous avez défini la propriété IsLocal à une valeur booléenne dans votre action de controller:

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

vous pouvez le faire sur la vue:

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

Et merci de ne pas utiliser ViewBag/ViewData. Utilisez des modèles de vues et des vues fortement dactylographiées.

voici Donc une meilleure approche que je préfère. Vous pouvez sérialiser JSON votre modèle de vue dans une variable javascript et ensuite traiter avec elle. Comme ceci:

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

évidemment si vous n'avez pas besoin de toute votre vue model Vous pouvez sérialiser JSON seulement un sous-ensemble de it = > seulement la partie qui sera nécessaire par les scripts client.

21
répondu Darin Dimitrov 2011-10-26 16:06:47

Vous pouvez utiliser la fonction suivante:

function parseBoolean(str)
{ 
   return /^true$/i.test(str);
}

et l'Utiliser comme

if(parseBoolean('@ViewBag.IsLocal') == true) 
{ 
   alert("yeah");
}
0
répondu ovais 2012-09-26 12:49:21