2009-12-03 61 views
0

我有以下宏:在星火視圖引擎傳遞的潛在空宏

<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將是無效的在某些情況下 (創建項目而不是編輯它),因此宏 不會運行或失敗,只是將宏調用輸出到視圖。

如何通過「」或model.Address.Address1 的值取決於地址是否爲空? null運算符($!{})does not 似乎在這種情況下工作。

回答

2

溶液1 Write方法

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

,並用它代替火花宏。

${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)} 

所有的解決方案取決於延遲執行。