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

Nov*_*ice 4 javascript asp.net-mvc viewbag

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

 public ActionResult Services()
    {

        ViewBag.TabVal = "EarnMoney";
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,我将View Bag值分配给这样的JavaScript变量

 @section scripts{

<script>
    var tab = @ViewBag.TabVal;
    console.log(tab);
 </script>
}
Run Code Online (Sandbox Code Playgroud)

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

    <li id="EarnMoney"> EarnMoney</li>
Run Code Online (Sandbox Code Playgroud)

这是我视图中的HTML元素.

为什么它在我的视图中选择元素而不给出一个字符串作为回报?这是非常奇怪的行为.

Ric*_*ard 5

var tab = @ViewBag.TabVal;
Run Code Online (Sandbox Code Playgroud)

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

var tab = EarnMoney;
Run Code Online (Sandbox Code Playgroud)

因此值将是JavaScript引擎在变量/属性中看到的任何值EarnMoney.

你需要将引号放在文字字符串中的替换中:

var tab = "@ViewBag.TabVal";
Run Code Online (Sandbox Code Playgroud)


Phu*_*yen 5

您将viewbag值直接输出到javascript,没有引号,因此它不是javascript中的字符串.从服务器生成的Html看起来像这样:

var tab = EarnMoney;
Run Code Online (Sandbox Code Playgroud)

并且由于存在具有该id的dom元素,因此它选择该元素

将ViewBag输出放在这样的引号中:

var tab = "@ViewBag.TabVal";
Run Code Online (Sandbox Code Playgroud)