繁体   English   中英

检查ViewBag值是否为null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM