重载spark视图引擎绑定

时间:2012-02-28 16:36:50

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

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

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

使用像<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"/>

它创建与上述用法相同的标记,即它不包含idclass html属性。我在这里做了一些根本错误的事吗?任何人都可以看到不正确的内容吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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