0

asp.net mvc バージョン 1.0 を使用していますが、URL のパラメーターに問題があります。

私のURLは次のようになります( http://localhost:2282/Tags/PostList/c# )

 routes.MapRoute(
           "TagsRoute",
           "Tags/PostList/{tag}",
           new { controller="Tags",Action="PostList",tag = "" }
       );

実際問題は、タグ パラメータがエンコードされていないため、シンボル # が無視されることです。

私はアクションリンクを使用していますが、バージョン 1.0 ではパラメーターを直接エンコードしていない可能性があります!

 <%=Html.ActionLink(itemtags.Tags.TagName,
                               "PostList","Tags",
                            new { tag = itemtags.Tags.TagName }, 
                            new { style = "color:red;" })%>

このアクションリンクを使用すると、空白のみが正しくエンコードされ、実際には asp.net mvc が asp.net%20mvc になり、正常に動作します! しかし、c# はエンコーディングではありません :(

だから私は Server.UrlEncode を使用しようとしましたが、実際にはいくつかのことが起こります!!!

実際、c# は c%2523 になりましたが、# の 16 進数は %23 であるため、これも正しくありません。

いくつかの解決策がありますか???? ルート制約?

ありがとう

4

1 に答える 1

0

どこかで二重エンコードが発生しています。%25 は % の記号なので、次のようになります。

'#' -> %23

'%23' -> %2523

特にユーティリティ メソッドをループに投入すると、データが既にエンコードされているかどうかを判断するのは困難です (データをエンコードするさらに別のユーティリティ メソッドを呼び出すことができるため)。ヘアラインを保存するために私が見つけた唯一の解決策は、テキストをどこでも同じデータ型 (文字列など) として渡すのではなく、一度エンコードしたデータにタグ付けクラスを使用することです。

データをエンコードするメソッドは、文字列を受け取ることはなく、文字列を返します。文字列を受け取り、文字列を保持する (エンコードされた) オブジェクトを返します。

于 2010-05-13T19:10:23.093 に答える