.Net MVC将ViewBag值分配给JavaScript脚本变量问题

时间:2015-07-16 08:46:27

标签: javascript asp.net-mvc viewbag

我正在尝试使用像这样的View Bag在我的视图中从我的控制器动作发送一个字符串值

 public ActionResult Services()
    {

        ViewBag.TabVal = "EarnMoney";
        return View();
    }

在我看来,我将View Bag值分配给像这样的

这样的JavaScript变量
 @section scripts{

<script>
    var tab = @ViewBag.TabVal;
    console.log(tab);
 </script>
}

在我的控制台上我得到了这个值

    <li id="EarnMoney"> EarnMoney</li>

这是我视图中的HTML元素。

为什么在我的视图中选择元素并且没有给出一个字符串作为回报?这是非常奇怪的行为。

3 个答案:

答案 0 :(得分:5)

95th Per Tx_fragment_cnt

当Razor引擎呈现视图时,@表达式将被直接替换:

var tab = @ViewBag.TabVal;

因此值将是JavaScript引擎在变量/属性var tab = EarnMoney; 中看到的任何内容。

您需要将引号括在文字字符串中的替换内容:

EarnMoney

答案 1 :(得分:5)

您将viewbag值直接输出到javascript,没有引号,因此它不是javascript中的字符串。 从服务器生成的Html如下所示:

var tab = EarnMoney;

由于有一个带有该id的dom元素,它会选择该元素

将您的ViewBag输出改为引用如下:

var tab = "@ViewBag.TabVal";

答案 2 :(得分:1)

您可以使用引号和@ sign

从查看包中获取价值
var tab = '@ViewBag.TabVal';