[英]Check if ViewBag value is null
我在MVC3项目中有一个View,在加载时我将一个Entity设置为ViewBag。 实体的属性之一是Datetime?
类型Datetime?
在$(document).ready
我将数据从ViewBag加载到View字段中。 为了正确加载日期,我必须解析日期:
$('#date_datepicker').datepicker("setDate", new Date('@ViewBag.Ent.MyDate.Year', '@ViewBag.Ent.MyDate.Month', '@ViewBag.Ent.MyDate.Day'));
当然,我首先通过以下方式检查@ViewBag.Ent.MyDate
的值是否不为null或为空:
if ('@ViewBag.Ent.MyDate' != null && '@ViewBag.Ent.MyDate' != '')
意思是,这是我的代码:
if ('@ViewBag.Ent.MyDate' != null && '@ViewBag.Ent.MyDate' != '') {
$('#date_datepicker').datepicker("setDate", new Date('@ViewBag.Ent.MyDate.Year', '@ViewBag.Ent.MyDate.Month', '@ViewBag.Ent.MyDate.Day'));
}
但是出于某种原因我得到了
无法对空引用执行运行时绑定
这是我的控制器代码:
public ActionResult PropertiesPage(string id)
{
if (!string.IsNullOrEmpty(id))
{
int myID = 0;
int.TryParse(id, out myID);
ent = myBL.GetByEntID(myID);
ViewBag.Ent = ent ;
}
return View();
}
为什么Javascript传递我的if
语句然后失败?
编辑:根据肯尼斯(Kenneth)的回答,我尝试将Javascript更改为:
@{if (ViewBag.Ent.MyDate != null) {
<script type="text/javascript">
$('#date_datepicker').datepicker("setDate", new Date('@ViewBag.Ent.MyDate.Year', '@ViewBag.Ent.MyDate.Month', '@ViewBag.Ent.MyDate.Day'));
</script>
}
}
这不会导致错误,但是不会起作用(由于语法错误,脚本失败)。 该代码生成:
<script type="text/javascript">
$('#date_datepicker').datepicker("setDate", new Date('@ViewBag.Ent.MyDate.Year', '@ViewBag.Ent.MyDate.Month', '@ViewBag.Ent.MyDate.Day'));
</script>
(意思是<script>
中的<script>
)
谢谢
对我有用的是将脚本标签放在javascript代码周围,如您在编辑中所示:
@if (ViewBag.Ent.MyDate != null) {
<script type="text/javascript">
$('#InitDate_datepicker').datepicker("setDate", new Date('@ViewBag.Ent.MyDate.Year', '@ViewBag.Ent.MyDate.Month', '@ViewBag.Ent.MyDate.Day'));
</script>
}
但是我将整个if块都拉到了现有脚本块的外面,因此它不是双重嵌套的。
您正在混合JavaScript代码和查看代码。 您的剃须刀代码将不会与JavaScript代码同时执行。 您需要做的是首先评估服务器上的剃刀代码,然后让该代码发出JavaScript:
@if (ViewBag.Ent.MyDate != null) {
$('#InitDate_datepicker').datepicker("setDate", new Date('@ViewBag.Ent.MyDate.Year', '@ViewBag.Ent.MyDate.Month', '@ViewBag.Ent.MyDate.Day'));
}
if
-statement将在服务器上执行。 如果MyDate为null,则不执行第二条语句,否则,将执行该语句并将生成的JavaScript向下发送到brwoser,并填充值。
我最终找到了一个有创意的解决方案。 我没有根据“ if”的结果生成脚本,而是根据if语句添加了隐藏字段,然后检查了隐藏字段的值。
实际上,在控制器中,您已经将ViewBag.Ent设置为动态表达式,但是在视图页面中添加了“ ViewBag.Ent.MyDate”来访问它,所以这将无法工作。使用类似您的代码
脚本
$(document).ready(function () {
if ("@ViewBag.Ent" != null) {
alert("@ViewBag.Ent");
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.