cshtml页面@Model.LocationID为null时报错 如何设置默认值为0
问题原因
你直接写@Model.LocationID ?? 0时,Razor解析器只会将@Model.LocationID识别为C#表达式输出,后续的?? 0会被当成普通静态文本处理,因此当LocationID为null时,就会渲染出空白+?? 0的错误内容。
解决方法
- 方法1:用括号包裹完整C#表达式
告诉Razor需要计算整个空合并表达式的值,直接修改代码为:
该写法会让Razor先完成C#表达式的计算,var params = {LocationID : @(Model.LocationID ?? 0)};LocationID为null时自动输出0,非null时输出对应数值,完全符合需求。 - 方法2:使用三元表达式(兼容旧版C#语法)
如果你的项目使用的C#版本对空合并运算符支持有问题,也可以用三元表达式实现相同效果:var params = {LocationID : @(Model.LocationID.HasValue ? Model.LocationID.Value : 0)}; - 方法3:ViewModel层预设默认值
你也可以直接在EnrollmentModel定义时给LocationID设置默认值,从根源避免null的出现:
改完之后前端直接写// EnrollmentModel定义中修改属性声明 public int? LocationID { get; set; } = 0;@Model.LocationID就不会出现null导致的语法错误。
额外提示
所有需要Razor输出计算后的C#表达式的场景,都建议用@()包裹完整表达式,避免Razor和前端语法的解析歧义,减少类似问题出现。
内容的提问来源于stack exchange,提问作者Damon
相关产品推荐
相关产品推荐

