2012-02-28 2 views
1

私が正常に動作します。このような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属性などで正しくアンカータグを作成します私は期待しています。

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

あなたはそれがワイルドカード渡されているわかります。

はしかし、私は、などは、このように、クラス、私はIDなどのHTML属性を追加することができますので、このタグに結合の過負荷を試してみました最後のDictionaryパラメータは、HtmlHelperのhtml属性パラメータです。私は次のようにActionLinkのタグを使用する場合ただし、:

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

それはidclass HTML属性が含まれていない上記の使用、すなわち、同じマークアップを作成します。基本的に何かここで間違っているのですか?誰かが間違っているものを見ることができますか?

答えて

1

バインディングを使用する場合、バインディングが宣言されている順序で一致することが前提です。したがって、上記で指定した順序でバインディングが宣言されていると、2番目のバインディングは決して一致しません。あなたは以下の順にバインディングを切り替えると

、それは動作するはずです:

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

、あなたはあなたのソリューションを再構築するまで変更が拾われませんことを認識しておく必要がありバインディングを使用した場合、あなたが変更を行っているなら、それは正しいかもしれませんが、あなたがまだ再構築していないので、彼らが拾われているように見えないかもしれません。

+0

ああ、ありがとう、私はそれが単にバインディングの順序を交換することは問題を解決する狂ったC#メソッドを過負荷と同じ方法で '仕事のためのベストを選んだという仮定の下にあった! – jcvandan

+0

ええ、それは全く同じように動作しないし、私はそれを1〜2回焼いてきました。あるいは、この特別なタグの場合、余分なものがなければ新しいDictionary [[string、object]] {{"* *"}}パラメータのために空のオブジェクトを渡すだけで、2番目のバインディングを完全に取り除くことができます要素。 – lomaxx

+0

funnily十分に私は実際に私がこの質問を投稿した直後にやったことです、私はまだそれが動作していなかった理由を知りたいので、私は自分自身に答えなかった – jcvandan