0

次の構造を持つ .Net MVC 3 Web アプリケーションがあります。

    • ビュー
      • アカウント
        • LoginPage.aspx
    • コントローラー
      • アカウントコントローラー
    • エリア
      • コース
        • インデックス.aspx

現在、コース領域のIndex.aspxページにいて、 LoginPage.aspxに転送するボタンがあるとします。

ASP.Net MVC では、http://localhost/Account/Loginを呼び出して、正しいページに誘導します。ブラウザに書き留めるだけで動作します!

しかし、私は HTML Helper ActionLinkを使いたいので、試しました:

<%: Html.ActionLink("Log on", "Login",  "Account", routeValues: null, htmlAttributes: new {  id = "logonLink", data_dialog_title = "Logon" })%>

相対パスを取得します: http://localhost/Course/Account/Login

私も試しました:

<%: Html.ActionLink("Log on", "Login",  "../Account", routeValues: null, htmlAttributes: new {  id = "loginLink", data_dialog_title = "Login" })%>

次のエラー メッセージが表示されました:トップ ディレクトリの上で終了するには、先頭の .. を使用できません。

相対パスも試しました:

<%: Html.ActionLink("Log on", "Login",  "~/Account", routeValues: null, htmlAttributes: new {  id = "loginLink", data_dialog_title = "Login" })%>

そして、それは私を次のように導きました:

http://localhost/Course/~/Account/Login

この問題の解決策を見つける方法を本当に感謝しています。

4

1 に答える 1

2

これを試して:

<%: Html.ActionLink("Log on", "Login",  "Account", new { area = "" } , new {  id = "logonLink", data_dialog_title = "Logon" })%>

重要なのはarea = ""ビットです。エリアを使用Url.Actionまたは使用Html.ActionLinkする場合、ルート値を指定しないareaと、MVCは現在のエリアで一致するもののみを検索します。

部分的なビュー/テンプレートを使用する場合は、さまざまな領域のビューでレンダリングできるため、さらに重要になります。

したがって、エリアを使用する場合は、またはを使用しない限り、常にareaルート値を指定する習慣を身に付けてください。Url.RouteUrlHtml.RouteLink

于 2012-03-03T04:13:20.563 に答える