【问题标题】:.Net MVC assigning ViewBag value to JavaScript script variable issue.Net MVC 将 ViewBag 值分配给 JavaScript 脚本变量问题
【发布时间】:2015-07-16 08:46:26
【问题描述】:

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

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

【问题讨论】:

  • 我们这里有所有代码吗,因为显示的代码不会发生这种情况......

标签: javascript asp.net-mvc viewbag


【解决方案1】:

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

var tab = EarnMoney;

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

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

var tab = "@ViewBag.TabVal";

【讨论】:

    【解决方案2】:
    var tab = @ViewBag.TabVal;
    

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

    var tab = EarnMoney;
    

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

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

    var tab = "@ViewBag.TabVal";
    

    【讨论】:

    • 我注意到了这一点,但这并没有向我解释为什么它会在控制台中输出为 HTML
    • @Coulton 没有。我怀疑 EarnMoney 是在那个时候定义的 JS 值(例如,相同的 - 缺少引号 - 缺陷可能出现在其他地方)。
    • 对不起@Richard,但 EarnMoney 没有被定义为 JS 变量,没有引号的 ViewBag 分配总是尝试选择具有该 id 的元素,如果该元素在 HTML 中不存在,则会给出错误,我没有继续讨论,因为我以为你们告诉我这是默认行为。
    【解决方案3】:

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

    var tab = '@ViewBag.TabVal';
    

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多