如何在foreach循环中为Null值显示N/A(ASP.NET Razor)
问题:foreach循环中无法正确显示Null值的N/A替代文本
当前有一段Razor代码,使用foreach循环遍历集合时,当item.Location.Warehouse为Null时,无法正常显示"N/A":
<td> @foreach (var item in items) { @(item.Location.Warehouse?.Name ?? "N/A") } </td>
而未使用foreach的单条数据代码可以正常触发"N/A"显示:
<td> @(item.Plant?.Name ?? "N/A") </td>
解决办法
问题核心是没处理集合为空的场景,以及缺少item.Location的空判断导致潜在异常,按以下方式修改即可:
方式1:显式判断集合+循环内处理属性
<td> @if (items == null || !items.Any()) { @("N/A") } else { foreach (var item in items) { // 多一层item.Location的空判断,避免空引用 @(item.Location?.Warehouse?.Name ?? "N/A") // 可选:给多个项添加分隔符,避免内容连在一起 @if (!items.Last().Equals(item)) { @(", ") } } } </td>
方式2:用LINQ简化处理
<td> @(items?.Select(item => item.Location?.Warehouse?.Name ?? "N/A") .Any() ? string.Join(", ", items.Select(item => item.Location?.Warehouse?.Name ?? "N/A")) : "N/A") </td>
原代码无效的原因
- 若
items集合本身为Null或空,foreach循环不会执行,单元格直接为空,不会输出"N/A" - 原代码只判断了
Warehouse的空,没判断item.Location的空——如果item.Location是Null,访问item.Location.Warehouse会抛出空引用异常,?? "N/A"根本没机会执行
内容的提问来源于stack exchange,提问作者m.woods
相关产品推荐
相关产品推荐

