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

.Net MVC assigning ViewBag value to JavaScript script variable issue

我正尝试像这样使用 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 元素。

为什么在我的视图中选择元素而不在 return 中给出字符串?这真是奇怪的行为。

var tab = @ViewBag.TabVal;

Razor引擎渲染视图时,直接替换@表达式:

var tab = EarnMoney;

因此该值将是 JavaScript 引擎在 variable/property EarnMoney.

中看到的任何值

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

var tab = "@ViewBag.TabVal";

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

var tab = EarnMoney;

并且由于有一个 dom 元素具有该 ID,它会选择该元素

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

var tab = "@ViewBag.TabVal";

您可以使用引号和@符号从视图包中获取值

var tab = '@ViewBag.TabVal';