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
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");
}
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.
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");
}