Sparkでビューモデルの空のコレクションを処理する
-
05-07-2019 - |
質問
スパークでは、コレクションが空のときにビューにビューモデルを送信すると、次のような頭痛の種が発生します。
<input value="model.addresses[0].street" />
場所&quot; model.addresses&quot;空の場合があるため、NREが生成されます。
とにかくこれを処理するのは、レンダリングの前にコレクションを作成することです。いくつかのカスタム処理が必要であり、それらを確実に入力するため、これは少し苦痛です。スパーク条件属性が機能すると考えていました:
<input value="model.addresses[0] != null?model.addresses.street" />
しかし、これらの状況を処理するより良い方法があるかもしれないと感じています。
解決
sparkドキュメントから:
null値と式の結果であるNullReferenceExceptionが出力をまったく生成しないようにする場合は、構文$!{expression}も使用できます。
http://sparkviewengine.com/documentation/expressions#Nullsinexpressions
他のヒント
他のいくつかのオプションが表示されます:
- リストアイテムに部分ビューを使用し、そこに一度NULLをチェックします。
- 拡張メソッドを追加して、NULLチェックを簡素化します。
これらは、私が自分で書いた中で最も使用されている拡張メソッドの1つです。
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)" />
所属していません StackOverflow