Перегрузка привязок двигателя искрового зрения

Я создал привязку для создания тега для Html.ActionLink html helper вроде этого, который отлично работает:

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

Используя tage как корректно создает якорный тэг с правильным атрибутом href как я ожидал.

Однако я попытался перегрузить привязку этого тега, чтобы я мог добавлять атрибуты html, такие как id, class и т.д., Например:

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

Вы заметите, что эта дикая карта передается последнему параметру словаря, который является атрибутом html-атрибутов HtmlHelper. Однако, когда я использую тег actionlink следующим образом:

Он создает ту же разметку, что и использование выше, то есть не включает атрибуты id и class html. Я что-то принципиально неправильно здесь? Кто-нибудь может понять, что неправильно?

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>

Кроме того, при использовании привязок вам нужно знать, что изменения не подбираются до тех пор, пока вы не восстановите свое решение, поэтому, если вы вносите изменения, они могут быть правы, но это может быть просто не похоже, что их подбирают потому что вы еще не восстановили.

licensed under cc by-sa 3.0 with attribution.