使用jquery的viewbag - asp.net mvc 3

时间:2011-10-26 15:42:53

标签: jquery asp.net-mvc-3 viewbag

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

代码:

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

我从来没有得到警报。当我使用Firebug查看ViewBag的值时,它是True(使用大写字母T)。我必须做一些像=='真'的事吗?我尝试了所有这一切,但没有一个工作。

感谢您的帮助。

ħ

3 个答案:

答案 0 :(得分: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序列化它的一个子集=&gt;只有客户端脚本需要的部分。

答案 1 :(得分:20)

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

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

原因是true.ToString()True

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

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

答案 2 :(得分:0)

您可以使用以下功能

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

并将其用作

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