【问题标题】:Overloading spark view engine bindings重载 spark 视图引擎绑定
【发布时间】:2012-02-28 16:36:50
【问题描述】:

我已经创建了一个绑定来为Html.ActionLink html 助手创建一个标签,这样可以正常工作:

<element name="actionlink">
    Html.ActionLink("child::*", "@action", new RouteValueDictionary{{"@route-*"}})
</element>

使用&lt;actionlink action="index" route-controller="users" route-id="${Model.Id}"/&gt; 之类的标签可以正确地创建具有正确href 属性的锚标签,正如我所期望的那样。

但是,我随后尝试重载此标签上的绑定,以便可以添加 html 属性,例如 id、class 等,如下所示:

<element name="actionlink">
    Html.ActionLink("child::*", "@action", new RouteValueDictionary{{"@route-*"}}, new Dictionary[[string,object]]{{"@*"}})
</element>

您会注意到它有通配符被传递给最后一个 Dictionary 参数,即HtmlHelper 的 html 属性参数。但是,当我以以下方式使用 actionlink 标记时:

<actionlink action="index" route-controller="users" route-id="${Model.Id}" id="linkId" class="className"/>

它创建与上述用法相同的标记,即它不包括 idclass html 属性。我在这里做一些根本错误的事情吗?有人能看出哪里不对吗?

【问题讨论】:

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


    【解决方案1】:

    使用绑定时,您必须注意的是绑定按照声明的顺序进行匹配,因此如果您按照上面指定的顺序声明绑定,则第二个绑定将永远不会匹配。

    如果您将绑定切换到以下顺序,那么它应该可以工作:

    <!-- most specific binding first -->
    <element name="actionlink">
        Html.ActionLink("child::*", "@action", new RouteValueDictionary{{"@route-*"}}, new Dictionary[[string,object]]{{"@*"}})
    </element>
    <element name="actionlink">
        Html.ActionLink("child::*", "@action", new RouteValueDictionary{{"@route-*"}})
    </element>
    

    此外,在使用绑定时,您需要注意,在您重新构建解决方案之前,更改不会被采纳,因此,如果您进行更改,它们可能是正确的,但看起来可能不像是因为你还没有重建而被捡起来。

    【讨论】:

    • 啊,好的,谢谢,我假设它以与重载 c# 方法相同的方式选择了“最适合工作”,这太疯狂了,只需交换绑定的顺序就可以解决问题!
    • 是的,它的工作原理不太一样,我已经被它烧了一两次了。或者,对于这个特定的标签,您可以完全摆脱第二个绑定,因为如果没有额外的参数,它只会为新的 Dictionary[[string,object]]{{"@*"}} 参数传递一个空对象元素。
    • 有趣的是,这就是我在发布这个问题后立即最终做的事情,我没有回答自己,因为我仍然想知道它为什么不起作用,再次感谢
    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多