我一直在使用火花视图引擎的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绑定,以便它不会抛出编译器错误?
答案 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构建。
如果情况并非如此,希望罗伯特能够纠正我。但如果是的话,也许这会让初学者(比如我自己)避免一些初步的困惑。