私はここで人里離れた道を少し冒険していますが、それはそれほど不合理ではないようです.
ビューでは、次のコードを使用します。
<div>Hello ${Name}</div>
{ Id: 1 , Name = " Bob " } で提供された jquery.tmpl を実行すると、クライアントで次のようにレンダリングされます。
<div>Hello Bob</div>
これは素晴らしいことですが、URL を紹介しましょう。
ビューでは、次のコードを使用します。
<div>Hello <a href="<%: Url.Action("Profile", new { id= "${Id}" }) %>">${Name}</a></div>
レンダリング先:
<div>Hello <a href="/User/Profile?id=%24%7BId%7D">${Name}</a></div>
jquery.tmpl を実行した後、エンコードされた Id タグが取得されません。
<div>Hello <a href="/User/Profile?id=%24%7BId%7D">Bob</a></div>
なぜこれが起こっているのか理解していますが、私が苦労しているのは、ルート値がエンコードされないようにする方法です。逆コンパイルされたコードをしばらく掘り下げた後、トレイルを失いました。エンコードの実際のメカニズムはわかりません。私だったら、 Route Values を に変換しHttpNameCollection
、ToString
などを使用しHttpUtility.Parse()
ます。
MVC はこのようなことに対して驚くほど柔軟なので、エンコーダーを変更したり、ルート値の値をMvcHtmlString
何かでラップしたりできないとは信じがたいです。
Url.Action を取得するにはどうすればよいですか。UrlHelper 拡張機能から取得するか、エンコーダーを置き換えて拡張し、jquery.tmpl 形式でルート値を保持します。${value}