当一个集合为空时将视图模型发送到视图时会产生火花,这让我有些头疼:

<input value="model.addresses[0].street" />

where“model.addresses”可能是空的,因此给出一个NRE。

除了在渲染之前填充集合之外,还有其他方法来处理这个问题。这有点痛苦,因为它重新检查一些自定义处理以确保它们被填充。我认为spark条件属性可以起作用:

<input value="model.addresses[0] != null?model.addresses.street" />

但我觉得可能有更好的方法来处理这些情况。

有帮助吗?

解决方案

来自spark文档:

  

如果要确保任何空值,也可以使用语法$!{expression},并且表达式产生的NullReferenceException根本不会产生任何输出。

http://sparkviewengine.com/documentation/expressions#Nullsinexpressions

其他提示

我看到了其他几个选项:

  1. 对列表项使用部分视图,并在那里检查一次NULL。
  2. 添加扩展方法以简化NULL检查。
  3. 这些是我为自己编写的最常用的扩展方法之一:

        public static TResult PropGet<TObject, TResult>(this TObject obj, Func<TObject, TResult> getter, TResult defaultValue) {
            if (ReferenceEquals(obj, null))
                return defaultValue;
            var res = getter.Invoke(obj);
            return ReferenceEquals(res, null) ? defaultValue : res;
        }
    
        public static TResult PropGet<TObject, TResult>(this TObject obj, Func<TObject, TResult> getter) {
            return PropGet(obj, getter, default(TResult));
        }
    

    所以在你看来你可以这样写:

    <input value="model.addresses[0].PropGet(a => a.street)" />
    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top