2009-12-03 5 views
0

J'ai la macro suivante:Passer nulls potentiels sur macros dans le moteur de vue Spark

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

Et l'appel à la macro:

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

Le seul problème est que model.Address sera nulle dans certaines situations (création de l'élément au lieu de l'éditer), à cause de cela la macro ne s'exécute pas ou échoue et affiche simplement l'appel de macro à la vue.

Comment puis-je transmettre "" ou la valeur de model.Address.Address1 en fonction de l'adresse est nulle ou non? l'opérateur null ($! {}) ne semble pas fonctionner dans cette instance.

Répondre

2

Solution 1. méthode Write

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

et de l'utiliser au lieu de macro Spark.

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

Solution 2. Utilisez http://www.jmill.net/taxonomy/term/312

Solution 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)} 

Toutes les solutions dépendent de l'exécution différée.

Questions connexes