正在重载spark视图引擎绑定



我已经创建了一个绑定来为Html.ActionLink html助手创建一个标签,它运行良好:

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

使用类似于tage的<actionlink action="index" route-controller="users" route-id="${Model.Id}"/>可以正确地创建具有正确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"/>

它创建的标记与上面的用法相同,即不包括idclasshtml属性。我在这里是不是做错了什么?有人能看到什么是不正确的吗?

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

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

<!-- 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>

此外,在使用绑定时,您需要意识到,在重建解决方案之前,更改不会被拾取,因此,如果您正在进行更改,它们可能是正确的,但可能只是看起来没有被拾取,因为您尚未重建。

最新更新