1. ホーム
  2. c#

[解決済み】HTML.ActionLinkメソッド

2022-04-04 06:39:41

質問

例えば、あるクラスがあるとします。

public class ItemController:Controller
{
    public ActionResult Login(int id)
    {
        return View("Hi", id);
    }
}

Item フォルダにないページで、ここで ItemController へのリンクを作成したい。 Login メソッドを使用します。では、どの Html.ActionLink メソッドを使用し、どのようなパラメータを渡せばよいのでしょうか?

具体的には、以下のメソッドに置き換わるものを探しています。

Html.ActionLink(article.Title,
    new { controller = "Articles", action = "Details",
          id = article.ArticleID })

が、最近のASP.NET MVCでは廃止されました。

どのように解決するのですか?

あなたが欲しいのは、これだと思うんです。

ASP.NET MVC1

Html.ActionLink(article.Title, 
                "Login",  // <-- Controller Name.
                "Item",   // <-- ActionMethod
                new { id = article.ArticleID }, // <-- Route arguments.
                null  // <-- htmlArguments .. which are none. You need this value
                      //     otherwise you call the WRONG method ...
                      //     (refer to comments, below).
                )

これは、以下のメソッドActionLinkの署名を使用しています。

public static string ActionLink(this HtmlHelper htmlHelper, 
                                string linkText,
                                string controllerName,
                                string actionName,
                                object values, 
                                object htmlAttributes)

ASP.NET MVC2

2つの引数が入れ替わりました

Html.ActionLink(article.Title, 
                "Item",   // <-- ActionMethod
                "Login",  // <-- Controller Name.
                new { id = article.ArticleID }, // <-- Route arguments.
                null  // <-- htmlArguments .. which are none. You need this value
                      //     otherwise you call the WRONG method ...
                      //     (refer to comments, below).
                )

これは、以下のメソッドActionLinkの署名を使用しています。

public static string ActionLink(this HtmlHelper htmlHelper, 
                                string linkText,
                                string actionName,
                                string controllerName,
                                object values, 
                                object htmlAttributes)

ASP.NET MVC3+

の引数はMVC2と同じ順番ですが、idの値は不要になりました。

Html.ActionLink(article.Title, 
                "Item",   // <-- ActionMethod
                "Login",  // <-- Controller Name.
                new { article.ArticleID }, // <-- Route arguments.
                null  // <-- htmlArguments .. which are none. You need this value
                      //     otherwise you call the WRONG method ...
                      //     (refer to comments, below).
                )

これにより、ルーティングロジックをリンクにハードコードすることを避けることができます。

 <a href="/Item/Login/5">Title</a> 

これで、以下のようなhtmlが出力される、と仮定します。

  1. article.Title = "Title"
  2. article.ArticleID = 5
  3. の場合、以下のルートが定義されています。

. .

routes.MapRoute(
    "Default",     // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);