0

コレクションが空のときにビューモデルをビューに送信すると、スパークで次のような頭痛の種が発生します。

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

「model.addresses」が空である可能性があるため、NRE が返されます。

レンダリングの前にコレクションにデータを入力する以外に、これを処理する方法はありますか? 確実にデータが取り込まれるようにカスタム処理が必要なため、これは少し面倒です。スパーク条件属性が機能すると考えていました:

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

しかし、これらの状況を処理するためのより良い方法があるかもしれないと感じています。

4

2 に答える 2

2

他にもいくつかのオプションがあります。

  1. リスト項目の部分ビューを使用し、そこに NULL があるかどうかを確認します。
  2. 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)" />
于 2009-11-26T05:14:30.783 に答える
1

スパークのドキュメントから:

構文 $!{expression} は、null 値を確実にする場合にも使用でき、式の結果として NullReferenceException がまったく出力を生成しないようにすることもできます。

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

于 2009-11-28T19:22:28.723 に答える