2

我在 MVC3 项目中有一个视图,在加载时我将一个实体设置到 ViewBag 中。实体的属性之一是Datetime? On$(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通过以下方式检查 的值是否为空或为空:

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语句然后失败?

编辑: 根据肯尼斯的回答,我尝试将我的 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>在 a 内<script>

谢谢

4

4 回答 4

2

正如您在编辑中显示的那样,对我有用的是在 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 块拉到现有脚本块之外,因此它不是双重嵌套的。

于 2016-05-04T15:29:18.363 回答
0

我最终找到了一个创造性的解决方案。我没有根据“if”的结果生成脚本,而是根据 if 语句添加了隐藏字段,然后检查了隐藏字段的值。

于 2013-08-21T08:24:20.253 回答
0

您正在混淆 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'));
}

-statementif将在服务器上执行。如果 MyDate 为 null,则不会执行第二条语句,如果不是,它将执行该语句并将生成的 JavaScript 发送到 brwoser,并填写值。

于 2013-08-19T06:47:22.247 回答
-1

Actually In controller you have set the ViewBag.Ent as the dynamic expression but in the view page you are adding "ViewBag.Ent.MyDate" for accessing it, So this wont work.Use your code like this

Script

$(document).ready(function () {
  if ("@ViewBag.Ent" != null) {
     alert("@ViewBag.Ent");
  }
});
于 2013-08-19T06:41:25.457 回答