在javascript中使用null c#模型

1 javascript c# asp.net-mvc json.net razor

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

var skill = @Model.Skill1 != null ? "@Model.Skill1.SkillName" : "";
Run Code Online (Sandbox Code Playgroud)

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

Object reference not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)

并且页面甚至不呈现.

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

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

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

Dav*_*vid 6

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

var skill = @Model.Skill1 != null ? "@Model.Skill1.SkillName" : "";
Run Code Online (Sandbox Code Playgroud)

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

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

进行空检查服务器端,只将结果发送到客户端代码.像这样的东西:

var skill = '@(Model.Skill1 != null ? Model.Skill1.SkillName : "")';
Run Code Online (Sandbox Code Playgroud)

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