2009-11-26 39 views
0

在火花導致我有些頭疼,像這樣:發送視圖模型時,集合爲空的觀點時,在處理視圖模型空收藏火花

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

其中「model.addresses」可能是空的並因此給出NRE。

有沒有辦法處理這個比渲染之前填充集合。這有點痛苦,因爲它需要重新定義一些自定義處理以確保它們已被填充。我認爲火花條件屬性會起作用:

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

但我覺得可能有更好的方法來處理這些情況。

回答

2

我看到其他幾個選項:列表項

  1. 使用局部視圖,並在那裏檢查NULL值一次。
  2. 添加擴展方法以簡化NULL檢查。

這些都是我爲我自己寫的最常用的擴展方法之一:

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