10

我在控制器中将 ViewBag.IsLocal 设置为 true。我想使用 jquery 检查 ViewBag 值并显示警报。

代码:

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

我从来没有收到警报。当我使用 Firebug 查看 ViewBag 的值时,它是 True(大写 T)。我必须做类似 == 'True' 的事情吗?我尝试了所有方法,但都没有奏效。

谢谢你的帮助。

H

4

3 回答 3

21

假设您已在控制器操作中将 IsLocal 属性设置为布尔值:

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

您可以在视图上执行此操作:

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

请不要使用 ViewBag/ViewData。使用视图模型和强类型视图。

所以这是我更喜欢的一种更好的方法。您可以 JSON 将您的视图模型序列化为 javascript 变量,然后对其进行处理。像这样:

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

显然,如果您不需要整个视图模型,则可以 JSON 仅序列化其中的一个子集 => 仅对客户端脚本所需的部分进行序列化。

于 2011-10-26T15:48:40.250 回答
20

如果您在呈现的页面上查看源代码,将插入什么来代替您的剃刀金块?如果IsLocal是 bool 类型,我想你会看到:

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

原因是因为true.ToString()True

在这种情况下,您需要在那里进行字符串比较:

if('@ViewBag.IsLocal' == 'True')
{
  alert("yeah");
}
于 2011-10-26T15:50:50.473 回答
0

您可以使用以下功能

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

并将其用作

if(parseBoolean('@ViewBag.IsLocal') == true) 
{ 
   alert("yeah");
}
于 2012-09-26T12:26:51.907 回答