ASP.NET MVC pasando una ID en un ActionLink al controlador

98

No puedo ver para recuperar una ID que estoy enviando en un html.ActionLink en mi controlador, esto es lo que estoy tratando de hacer

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


    public ActionResult Modify(string ID)
    {

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

Eso es lo que recomendaba un tutorial que seguí, pero no funciona, ¡también está poniendo? Length = 5 al final de la URL!

¡Gracias por adelantado!

editar: aquí está la ruta que estoy usando, es predeterminada

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

parece que alguien ha rechazado las dos sugerencias a continuación, ¡pero no ha publicado su solución!

Tableta
fuente

Respuestas:

203

No parece que esté utilizando la sobrecarga correcta de ActionLink. Prueba esto:-

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

Esto supone que su vista está en la carpeta / Vistas / Villa. Si no, sospecho que necesita: -

<%=Html.ActionLink("Modify Villa", "Modify", "Villa", new {id = "1"}, null)%>
AnthonyWJones
fuente
4
Buena decisión: el problema fue que la primera sobrecarga de esa función tomó "HtmlAttributes" como cuarto parámetro. Entonces, agregar ", null" obligó al compilador a usar su objeto en línea como parámetros de ruta.
Timothy Khouri
26

En MVC 4 puede vincular de una vista a otro controlador pasando la Id o la clave principal a través de

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

No pongas @ antes de la identificación

new { id = "1" }

¿El marco lo "traduce" en? Longitud cuando hay un desajuste en el parámetro / ruta

Davide Vosti
fuente
5

En MVC 5 es bastante similar

@Html.ActionLink("LinkText", "ActionName", new { id = "id" })
César León
fuente
1

La ID también funcionará con el @signo al frente, pero tenemos que agregar un parámetro después de eso. es decirnull

parece:

@Html.ActionLink("Label Name", "Name_Of_Page_To_Redirect", "Controller", new {@id="Id_Value"}, null)
ebsom
fuente