当一个集合为空时将视图模型发送到视图时会产生火花,这让我有些头疼:
<input value="model.addresses[0].street" />
“model.addresses”可能为空,因此给出了NRE。
除了在渲染之前填充集合之外,还有其他方法来处理这个问题。这有点痛苦,因为它重新检查一些自定义处理以确保它们被填充。我认为spark条件属性可以起作用:
<input value="model.addresses[0] != null?model.addresses.street" />
但我觉得可能有更好的方法来处理这些情况。
答案 0 :(得分:2)
我看到了其他几个选项:
这些是我为自己编写的最常用的扩展方法之一:
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