在JQuery中使用ViewBag对象,值无法正确显示

时间:2014-07-28 08:01:36

标签: jquery asp.net-mvc-3

我正在开发一个MVC3应用程序。在我的操作中,我有ViewBag对象具有true或false值 - 我使用断点并且可以看到在操作中,它们具有正确的值。 现在,当我到达视图时,我想在jQuery中检查这些ViewBag对象  代码:

if (@ViewBag.ind == true) {
        $objKpr = $(".@ViewBag.kpr");
        $objKpr.click();
    }

当我使用Firebug测试自己的代码时,它返回

 if (False == false) 
         {
        $objKpr = $(".@ViewBag.kpr");
        $objKpr.click();
         }

Viewbag被解释为'False',而不是一个值为false的变量。为什么会发生这种情况?

感谢您的回答 但问题出在另一个问题 - 为什么jQuery中的ViewBag不会产生正确的值?

3 个答案:

答案 0 :(得分:1)

您只需使用

即可
var condition = @(myBooleanVariableInCSharp ? "true" : "false";
if (condition == true) {
    $objKpr = $(".@ViewBag.kpr");
    $objKpr.click();
}

或者

您应该使用@ViewBag.ind.ToString().ToLower()。您需要转换JavaScript可以理解的值。

您的问题,因为bool值在javascript中为小写,在C#中为大写

if (@ViewBag.ind.ToString().ToLower() == true) {
    $objKpr = $(".@ViewBag.kpr");
    $objKpr.click();
}

答案 1 :(得分:1)

在代码中调用@ViewBag.MyProperty将导致Razor引擎通过调用值ToString()来呈现属性。 E.g。

if (@ViewBag.ind == true) {

呈现为:

if (True == true) {

因此,您可能希望将代码更改为:

if (@ViewBag.ind.ToString().ToLowerInvariant() === true)

虽然ViewBag中的值仅可用于在呈现页面时注入JavaScript / View。它们不像JavaScript那样动态,变量​​在客户端保存,可以根据需要多次翻转/更改。

您可能希望使用该技术为脚本注入初始值:

$(document).ready(function () {
    var ind = @ViewBag.ind.ToString().ToLowerInvariant();

    DoSomething(ind);
});

function DoSomething(ind) {
    if (ind) {
        $objKpr = $(".@ViewBag.kpr");
        $objKpr.click();
    }
}

通过这种方式,您可以在渲染时初始化ind的行为,但随后在客户端更改ind的值,并使用不同的值多次调用函数DoSomething()。 / p>

您可能希望研究使用JSON,AJAX调用和JavaScript模块模式。

答案 2 :(得分:0)

试试这个;

if ("@(ViewBag.ind == null ? "false" : ViewBag.ind.ToString().ToLower())" === "true") {

即使ViewBag.ind为空,也不会出错。

谢谢!