具有类Html属性的Spark视图引擎绑定

时间:2010-11-11 13:42:18

标签: asp.net-mvc spark-view-engine

我一直在使用火花视图引擎的Bindings功能来替换我的一些Html辅助方法调用。

我遇到的一个问题是我想定义一个css类来传递给helper方法的匿名字典参数,我通常会这样做:

${Html.EditorFor(x=>x.Username, new{@class = "css-class"})}

使用spark Binding替换它看起来像这样:

绑定:

<element name="Editor">Html.EditorFor(x => x.@For, new {"@*"}) </element>

查看元素:

<Editor For="Password" class="css-class" />

我收到错误“命名空间不能直接包含诸如字段或方法之类的成员”,这是有效的,因为它正在解析为

Output.Write(Html.EditorFor(x => x.Password, new {class="big"}) );

问题显然是我需要使用@class而不是class。

但是,我不能像这样

在html属性中指定@class
<Editor For="Password" @class="css-class" />

因为火花忽略它。

我也不能像这样指定:

<element name="Editor">Html.EditorFor(x => x.@For, new {@"@*"}) </element>

因为那时传递的每个html属性都将以@符号为前缀。

所以我的问题是,在使用它来初始化字典参数时,如何将class HTML属性传递给spark绑定,以便它不会抛出编译器错误?

2 个答案:

答案 0 :(得分:2)

你的观察是正确的。您认为绑定中的正确语法类似于:

<element name="Editor">Html.EditorFor(x => x.@For, new Dictionary[[string,object]]{{"@*"}}) </element>

而不是

<element name="Editor">Html.EditorFor(x => x.@For, new {"@*"}) </element>

这样,您在视图中附加到标记的任何属性都不会通过名称专门处理,将作为呈现输出上的名称值对属性传递。

我希望我的语法正确,这对你有用吗?

一切顺利, 罗布

答案 1 :(得分:1)

很抱歉劫持这个问题。但是对于任何以绑定开头的人来说,如果你使用稳定的Spark 1.1.0,我认为有关于#和child :: *的绑定存在一些错误。修复是使用开发spark构建。

如果情况并非如此,希望罗伯特能够纠正我。但如果是的话,也许这会让初学者(比如我自己)避免一些初步的困惑。