使用spark处理视图模型中的空集合

时间:2009-11-26 02:27:26

标签: asp.net-mvc spark-view-engine

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

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

“model.addresses”可能为空,因此给出了NRE。

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

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

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

2 个答案:

答案 0 :(得分:2)

我看到了其他几个选项:

  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)" />
    

答案 1 :(得分:1)

来自spark文档:

  

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

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