ASP.NET MVC passando um ID em um ActionLink para o controlador

99

Não consigo recuperar um ID que estou enviando em um html.ActionLink em meu controlador. Aqui está o que estou tentando fazer

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


    public ActionResult Modify(string ID)
    {

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

Isso é o que um tutorial que eu segui recomendou, mas não está funcionando, também está colocando? Length = 5 no final da URL!

Desde já, obrigado!

editar: aqui está a rota que estou usando, é o padrão

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

parece que alguém votou contra as duas sugestões abaixo, mas não postou a solução!

Tábua
fonte

Respostas:

204

Não parece que você está usando a sobrecarga correta do ActionLink. Experimente isto: -

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

Isso pressupõe que sua visualização está na pasta / Visualizações / Villa. Se não, suspeito que você precisa: -

<%=Html.ActionLink("Modify Villa", "Modify", "Villa", new {id = "1"}, null)%>
AnthonyWJones
fonte
5
Boa chamada - O problema é que a primeira sobrecarga dessa função pegou "HtmlAttributes" como quarto parâmetro. Portanto, adicionar ", null" forçou o compilador a usar seu objeto embutido como parâmetros de rota.
Timothy Khouri
27

No MVC 4, você pode vincular de uma visão a outro controlador passando o Id ou chave primária via

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

Não coloque @ antes do id

new { id = "1" }

O framework "traduz" em comprimento quando há uma incompatibilidade no parâmetro / rota

Davide Vosti
fonte
6

No MVC 5 é bastante semelhante

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

O ID funcionará com o @sinal na frente também, mas temos que adicionar um parâmetro depois disso. isso énull

parece:

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