ActionLinkのIDをコントローラーに渡すASP.NET MVC


98

私のコントローラーのhtml.ActionLinkで送信しているIDを取得することができません。これは私がやろうとしていることです

<li>
    <%= Html.ActionLink("Modify Villa", "Modify", "Villa", new { @id = "1" })%></li>


    public ActionResult Modify(string ID)
    {

        ViewData["Title"] =ID;
        return View();
    }

それが私が従ったチュートリアルが推奨するものですが、それは機能していません。また、URLの最後に?Length = 5を付けています!

前もって感謝します!

編集:これが私が使っているルートです、それがデフォルトです

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

誰かが以下の2つの提案に反対票を投じたようですが、解決策を投稿していません。

回答:


203

ActionLinkの正しいオーバーロードを使用しているようではありません。これを試して:-

<%=Html.ActionLink("Modify Villa", "Modify", new {id = "1"})%>

これは、ビューが/ Views / Villaフォルダーの下にあることを前提としています。そうでなければ、私はあなたが必要だと思います:-

<%=Html.ActionLink("Modify Villa", "Modify", "Villa", new {id = "1"}, null)%>

4
良い呼び出し-問題は、その関数の最初のオーバーロードが4番目のパラメーターとして "HtmlAttributes"を取ることでした。したがって、「、null」を追加すると、コンパイラーはインラインオブジェクトをルートパラメーターとして使用する必要がありました。
Timothy Khouri

26

MVC 4では、1つのビューから別のコントローラーにリンクして、IDまたは主キーを渡すことができます。

@Html.ActionLink("Select", "Create", "StudentApplication", new { id=item.PersonId }, null) 

12

IDの前に@を付けないでください

new { id = "1" }

パラメータ/ルートに不一致がある場合、フレームワークはそれを?Lenghtに「変換」します



1

IDは@サインイン前でも機能しますが、その後にパラメーターを1つ追加する必要があります。あれはnull

のように見える:

@Html.ActionLink("Label Name", "Name_Of_Page_To_Redirect", "Controller", new {@id="Id_Value"}, null)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.