在javascript中使用null c#模型

时间:2016-04-22 15:43:10

标签: javascript c# asp.net-mvc razor json.net

我试图在我的脚本中使用来自Razor的viewmodel。 问题是,有时,由EF生成的具有循环值的复杂模型为空。

var skill = @Model.Skill1 != null ? "@Model.Skill1.SkillName" : "";

当@ Model.Skill1不为null时,我可以使用@ Model.Skill1.SkillName。但如果@ Model.Skill1为null,则结果为

Object reference not set to an instance of an object.

页面甚至没有呈现。

即使没有触发访问属性SkillName的条件,似乎@ Model.Skill1.SkillName也无法在代码中写入。

所以我试图将我的对象转换为Json对象,但这次我有循环值产生问题。

任何想法或方法绕过这个问题?

1 个答案:

答案 0 :(得分:6)

您正在混合语言。如果这是在您的JavaScript块中:

var skill = @Model.Skill1 != null ? "@Model.Skill1.SkillName" : "";

然后你有两个服务器端语句。没有逻辑决定是否执行它们。所以他们都执行,第二个是NullReferenceException

基本上,您尝试发出对客户端的空引用,因此客户端可以检查它是否为空。但到那时你已经试图取消引用它,因此错误。

执行空检查服务器端,然后将结果发送到客户端代码。像这样:

var skill = '@(Model.Skill1 != null ? Model.Skill1.SkillName : "")';

在Razor @()的括号中包装一个值发射表达式意味着整个语句是服务器端代码,并且应该产生单个发射值。