ASP.NET MVC将ActionLink中的ID传递给控制器

Tab*_*let 97 c# asp.net-mvc

我无法在我的控制器中查看我在html.ActionLink中发送的ID,这是我正在尝试做的事情

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


    public ActionResult Modify(string ID)
    {

        ViewData["Title"] =ID;
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

这就是我所遵循的教程,但它不起作用,它也在URL的末尾放置了长度= 5!

提前致谢!

编辑:这是我正在使用的路线,这是默认路线

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

看来有人对以下两条建议进行了投票,但没有发布他们的解决方案!

Ant*_*nes 201

看起来你没有使用正确的ActionLink重载.试试这个:-

<%=Html.ActionLink("Modify Villa", "Modify", new {id = "1"})%>
Run Code Online (Sandbox Code Playgroud)

假设您的视图位于/ Views/Villa文件夹下.如果没有,那么我怀疑你需要: -

<%=Html.ActionLink("Modify Villa", "Modify", "Villa", new {id = "1"}, null)%>
Run Code Online (Sandbox Code Playgroud)

  • 好的调用 - 问题是该函数的第一次重载将"HtmlAttributes"作为第四个参数.因此,添加",null"会强制编译器将您的内联对象用作路由参数. (4认同)

小智 24

在MVC 4中,您可以从一个视图链接到另一个通过Id或主键的控制器

@Html.ActionLink("Select", "Create", "StudentApplication", new { id=item.PersonId }, null) 
Run Code Online (Sandbox Code Playgroud)


Dav*_*sti 11

不要把id放在@之前

new { id = "1" }
Run Code Online (Sandbox Code Playgroud)

当参数/路线不匹配时,框架会"翻译"它


Cés*_*eón 6

在 MVC 5 上非常相似

@Html.ActionLink("LinkText", "ActionName", new { id = "id" })
Run Code Online (Sandbox Code Playgroud)