【问题标题】:Run JavaScript block depending on ViewBag value根据 ViewBag 值运行 JavaScript 块
【发布时间】:2016-04-19 21:37:44
【问题描述】:

我正在尝试运行一段 JavaScript 代码,但前提是 ViewBag 值等于 null。下面是一个例子:

<script type="text/javascript">
    var defDate = @ViewBag.EndDate;
    if (defDate == null)
    {
        $('#dt2').datetimepicker({
            locale: 'en-GB',
            format: 'L',
            showClear: true
        });
    }

    else
    {
        $('#dt2').datetimepicker({
            defaultDate: defDate,
            locale: 'en-GB',
            format: 'L',
            showClear: true
        });
    }

</script>

但是,这似乎不起作用,因此我们将不胜感激。

编辑:

我想我可以在启动时运行这两个 JavaScript 块?我是否应该制作一个单独的在启动时运行然后运行相关(非启动)功能 - 如果这有意义吗?

这里是按要求初始化 ViewBag 的地方:

ViewBag.EndDate = endDateFilter;

【问题讨论】:

  • 首先尝试将您的代码放入$(document).ready(function(){。其次,你能发布初始化ViewBag.EndDate的代码吗?
  • @erikscandola 我会把它添加到帖子中,但这应该很重要,只要假设它是 null 或者它有一个值。
  • 但如果 value 是字符串,则需要添加引号:"@ViewBag.EndDate"。如果值为DateTime,则解决方案不一样。
  • 对不起,我明白了,它被解析为一个字符串,就像 Felix Cen 的回答一样。感谢您的帮助。
  • 没问题。是的,即使你总是初始化endDateFilter,如果你有一个字符串,Felix 的答案是正确的。如果 endDateFilter 没有在您的 javascript 中初始化,您将拥有 var defDate = "null"; 并且 if 将不起作用。

标签: javascript c# asp.net-mvc datepicker viewbag


【解决方案1】:

您需要将 viewbag 值用引号括起来。试试下面的

<script type="text/javascript">
        var defDate = '@ViewBag.EndDate';
        if (defDate == '')
        {
            $('#dt2').datetimepicker({
                locale: 'en-GB',
                format: 'L',
                showClear: true
            });
        }

        else
        {
            $('#dt2').datetimepicker({
                defaultDate: defDate,
                locale: 'en-GB',
                format: 'L',
                showClear: true
            });
        }

    </script>

【讨论】:

  • 完美运行。非常感谢 - 以为我很接近,只是表明我缺乏 JS 知识!
【解决方案2】:

替换

(defDate == null)

(defDate.length < 1)

【讨论】:

  • 你好,试过了,还是不行,日期选择器打不开。
猜你喜欢
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多