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 在某些情况下(创建项目而不是编辑它)将为空,因此宏不会运行或失败,只会将宏调用输出到视图。

如何根据 Address 是否为空来传递“”或 model.Address.Address1 的值?空运算符 ($!{}) 在这种情况下似乎不起作用。

4

1 回答 1

2

解决方案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 )}

所有解决方案都依赖于延迟执行。

于 2009-12-03T20:40:10.060 回答