使用jquery的viewbag - asp.net mvc 3

bob*_*bek 10 jquery viewbag asp.net-mvc-3

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

码:

if(@ViewBag.IsLocal == true)
{
alert("yeah");
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

H

Dar*_*rov 21

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

public ActionResult Index()
{
    ViewBag.IsLocal = true;
    return View();
}
Run Code Online (Sandbox Code Playgroud)

你可以在视图上这样做:

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

请不要使用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>
Run Code Online (Sandbox Code Playgroud)

显然,如果您不需要整个视图模型,那么JSON只能序列化它的一个子集=>只有客户端脚本需要的部分.

  • 我试图让这个人直接回答他的实际问题.他是如此接近,为什么过分复杂的答案并隐藏他的意思? (2认同)

Dav*_*ard 20

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

@if(True == true)
{
  alert("yeah");
}
Run Code Online (Sandbox Code Playgroud)

其原因是,因为true.ToString()True.

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

if('@ViewBag.IsLocal' == 'True')
{
  alert("yeah");
}
Run Code Online (Sandbox Code Playgroud)

  • 您的两个代码段都不会起作用..NET中没有定义`alert`函数.您需要告诉Razor解释器不要将其解释为服务器端代码并​​将其视为文字. (2认同)
  • 当然第一个不起作用.它不应该是工作代码的一个例子.你有没有读过我的答案? (2认同)