我试图在我的脚本中使用来自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对象,但这次我有循环值产生问题。
任何想法或方法绕过这个问题?
答案 0 :(得分:6)
您正在混合语言。如果这是在您的JavaScript块中:
var skill = @Model.Skill1 != null ? "@Model.Skill1.SkillName" : "";
然后你有两个服务器端语句。没有逻辑决定是否执行它们。所以他们都执行,第二个是NullReferenceException
。
基本上,您尝试发出对客户端的空引用,因此客户端可以检查它是否为空。但到那时你已经试图取消引用它,因此错误。
执行空检查服务器端,然后将结果发送到客户端代码。像这样:
var skill = '@(Model.Skill1 != null ? Model.Skill1.SkillName : "")';
在Razor @()
的括号中包装一个值发射表达式意味着整个语句是服务器端代码,并且应该产生单个发射值。