1

次のようなアクションがあります。

public ActionResult UserDetails(string id)
{
}

context.MapRoute(
            "Admin_Default",
            "{controller}/{action}/{id}",
            new { action = "Index", controller = "Start", id = UrlParameter.Optional }
        );

別のビューには、.net の標準メンバーシップ管理からのユーザーのリストがあります。ユーザー名をクリックして詳細を表示すると、ユーザー名が 1 つの単語である場合にのみ機能します。最近、次のようなユーザー名に遭遇しました。

スティーブン CH アンダーソン

だから私はこれを使ってリンクを作成します:

@Html.ActionLink(Model.UserName, "UserDetails", new { controller = "Security", id = HttpUtility.UrlEncode(Model.UserName) })

しかし、それをクリックすると、次のように表示されます: HTTP エラー 404.11 - 見つかりません

1 つの単語である通常のユーザー名をクリックすると、魅力的に機能します。

ルート構成がこのリクエストを理解していないと思いますが、問題はそれを機能させる方法ですか?

アップデート

リンク:

<a href="/Security/UserDetails/Steven%2bC.H.%2bAndersson">Steven C.H. Andersson</a>
4

2 に答える 2

0

私は同じ問題を抱えていました。これが私が解決した方法ですが、それが最善の方法であるかどうかはわかりません。よりエレガントなソリューションを聞きたいと思っています。

ビューファイルで:

@Html.ActionLink(Model.UserName, "UserDetails", new { controller = "Security", id = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Model.UserName)) })

コントローラーファイルで:

id = Encoding.UTF8.GetString(Convert.FromBase64String(id))
于 2013-08-21T12:30:54.857 に答える