2009-12-03 34 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)} 

所有的解决方案取决于延迟执行。