1

私はここで人里離れた道を少し冒険していますが、それはそれほど不合理ではないようです.

ビューでは、次のコードを使用します。

<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 を に変換しHttpNameCollectionToStringなどを使用しHttpUtility.Parse()ます。

MVC はこのようなことに対して驚くほど柔軟なので、エンコーダーを変更したり、ルート値の値をMvcHtmlString何かでラップしたりできないとは信じがたいです。

Url.Action を取得するにはどうすればよいですか。UrlHelper 拡張機能から取得するか、エンコーダーを置き換えて拡張し、jquery.tmpl 形式でルート値を保持します。${value}

4

1 に答える 1