Передача потенциальных нулей в макросы в движке просмотра Spark - PullRequest
0 голосов
/ 03 декабря 2009

У меня есть следующий макрос:

<macro name="InputField" id="string" value="string">
...
      <input type="text" id="${id}" name="${id}" value="${value}  />
...
</macro>

И вызов макроса:

${InputField( "model.address.address1", 75, "Address", model.Address.Address1 )}

Единственная проблема в том, что модель. В некоторых ситуациях адрес будет нулевым (создание элемента вместо его редактирования), из-за этого макрос не запускается или дает сбой, а просто выводит вызов макроса в представление.

Как мне передать либо "", либо значение model.Address.Address1 в зависимости от того, является ли адрес нулевым или нет? нулевой оператор ($! {}) не похоже, работает в этом случае.

1 Ответ

2 голосов
/ 03 декабря 2009

Решение 1. Метод записи

public static string HandleNull(Func<object> func)
{
   try { return func().ToString(); } 
   catch (NullReferenceException) { return ""; }
}

и используйте его вместо макроса Spark.

${InputField( "model.address.address1", 75, "Address", HandleNull(() => model.Address.Address1) )}

Решение 2. Использование http://www.jmill.net/taxonomy/term/312

Решение 3.

<macro name="InputField" id="string" value="Func<string>">
...
      <input type="text" id="${id}" name="${id}" value="$!{value()}  />
...
</macro>

${InputField( "model.address.address1", 75, "Address", () => model.Address.Address1 )}

Все решения зависят от отложенного выполнения.

...