Обработка пустых коллекций в представлении модели с искрой - PullRequest
0 голосов
/ 26 ноября 2009

При отправке модели представления в представление, когда коллекция пуста, возникают некоторые головные боли, например:

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

Где "model.addresses" может быть пустым и, таким образом, дает NRE.

Есть ли в любом случае справиться с этим, кроме заполнения коллекций до рендеринга. Это немного сложно, так как требуется некоторая пользовательская обработка, чтобы убедиться, что они заполнены. Я думал, что условный атрибут искры сработает:

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

Но я чувствую, что может быть лучший способ справиться с этими ситуациями.

Ответы [ 2 ]

2 голосов
/ 26 ноября 2009

Я вижу пару других вариантов:

  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)" />
1 голос
/ 28 ноября 2009

Из документации по искрам:

Синтаксис $! {Expression} также можно использовать, если вы хотите гарантировать, что любые нулевые значения и NullReferenceException, которые являются результатом выражения, вообще не будут выводить.

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

...