我在一个MVC3项目中有一个视图,在加载时我将一个实体设置到ViewBag中。实体的属性之一是Datetime?
类型。在$(document).ready
上,我将数据从ViewBag加载到视图字段中。为了正确加载日期,我必须解析日期:
$('#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>
)
谢谢
5条答案
按热度按时间yc0p9oo01#
对我有效的方法是在javascript代码周围加上script标签,如您在编辑中所示:
但是我将整个if块从现有的脚本块中取出,因此它不是双重嵌套的。
g52tjvyc2#
我最终找到了一个创造性的解决方案,我没有根据“if”的结果生成脚本,而是根据if语句添加隐藏字段,然后检查隐藏字段的值。
jecbmhm33#
您混淆了JavaScript代码和视图代码。您的razor-code不会与JavaScript代码同时执行。您需要做的是首先在服务器上评估razor-code,然后让该代码发出JavaScript:
if
-语句将在服务器上执行,如果MyDate为null,则第二条语句不执行,如果不是,则执行该语句并将生成的JavaScript发送给brwoser,并填入值。cgh8pdjw4#
最好的解决方案是用razor语法创建一个布尔变量,并根据viewbag是否为空来设置该变量,然后在脚本中使用该变量。
i2byvkas5#
实际上在控制器中你已经设置了ViewBag.Ent作为动态表达式,但是在视图页面中你添加了"ViewBag.Ent.MyDate"来访问它,所以这不起作用。