根据 ViewBag 值运行 JavaScript 块
Posted
技术标签:
【中文标题】根据 ViewBag 值运行 JavaScript 块【英文标题】:Run JavaScript block depending on ViewBag value 【发布时间】: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 将不起作用。
【参考方案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)
【讨论】:
你好,试过了,还是不行,日期选择器打不开。以上是关于根据 ViewBag 值运行 JavaScript 块的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript
如何使用来自 ViewBag 的 JSON 填充 javascript 变量?