<%= Html.RouteLink(product.DisplayName, "ShopProductNames", new {Id = product.Id, ProductName = product.DisplayName.Replace(' ', '-') }) %>
が、私はそれのURLで表示名をURLエンコードする必要がweb.configファイルで定義された経路に基づいて構築されるページで定義され、以下のリンク私は次のようにエンコーディングを追加するときに、リンクは、しかし、:
<%= Html.RouteLink(product.DisplayName, "ShopProductNames", new {Id = product.Id, ProductName = Url.Encode(product.DisplayName.Replace(' ', '-')) }) %>
それは、二重(URLで)私のDisplayNameをコードし、そして私は、IISでエラーが発生します。
My DisplayNameプロパティは、ページに渡される前にエンコードされていません。また、RouteLinkは、ページがレンダリングされるときに空白またはアンパサンドを拾わないため、レンダリングされたリンクのURLエンコーディングがデフォルトでは表示されません。
誰かが間違っていることを知っていますか?
UPDATE:私は実際にRouteLinkによって生成されたURLを参照しています、いないリンクテキスト自体
UPDATE 2:ここで私はHtmlHelper.csで
routes.MapRoute(
"ShopProductNames",
"Shop/{productName}/p/{id}/{*nameInfo}",
new
{
controller = "Product",
action = "Detail"
}
);
Url.Encode()を使用せずにProductName = product.DisplayName.Replace( ''、 ' - ') 。ルート値はRouteLink()でエンコードされます。たとえば、 ""%20 "にエンコードされます。 –
うん、私はそれを試みましたが、それはまだエンコードしません。 –
また、私はMVCソースを見ています、私はすべてのRouteLinkコールを追跡しました。私が知る限り、URLエンコーディングコールはありません。 –