我在MVC3项目中有一个View,在加载时我将一个Entity设置到ViewBag中。
实体的一个属性属于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
的值是否为空或空:
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>
)
由于
答案 0 :(得分:1)
对我来说有用的是将脚本标记放在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块拉到了现有的脚本块之外,所以它不是双嵌套的。
答案 1 :(得分: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'));
}
if
- 语句将在服务器上执行。如果MyDate为null,则第二个语句不会被执行,如果不是,它将执行该语句并将生成的JavaScript发送到brwoser,并填入值。
答案 2 :(得分:0)
我最终找到了一个有创意的解决方案。我没有根据“if”的结果生成脚本,而是根据if语句添加隐藏字段,而不是检查隐藏字段值。
答案 3 :(得分:-1)
实际上在控制器中你已经将ViewBag.Ent设置为动态表达式,但是在视图页面中你要添加“ViewBag.Ent.MyDate”来访问它,所以这不会工作。使用这样的代码
<强>脚本强>
$(document).ready(function () {
if ("@ViewBag.Ent" != null) {
alert("@ViewBag.Ent");
}
});