none
ActionLink não funcionando RRS feed

  • Pergunta

  • Boa tarde.

    Estou tentando usar o @Html.ActionLink() porém está dando o erro da ScreenShoot abaixo. Já tentei algumas opções mais não funcionam.

    O objetivo é acessar a controller "Home" na action "Index" e passando um ID. Segue o comando:

    @Html.ActionLink(ambiente.nome, "Index", "Home", new {id = "1"})

    O erro é o seguinte:

    Erro de Compilação 
      Descrição: Erro ao compilar um recurso necessário para atender esta solicitação. Examine os detalhes específicos do erro e modifique o código fonte apropriadamente. 
    
     Mensagem de Erro do Compilador: CS1973: 'System.Web.Mvc.HtmlHelper<dynamic>' não possui um método aplicável nomeado 'ActionLink', mas aparenta possuir um método de extensão com esse nome. Os métodos de extensão não podem ser expedidos dinamicamente. Considere converter os argumentos dinâmicos ou chamar o método de extensão sem a sintaxe do método.
    
    Erro de Origem:
    
    
     
    
    Linha 54:         @foreach (var ambiente in Model[1])
    Linha 55:         {
    Linha 56:             <li>@Html.ActionLink(ambiente.nome, "Index", "Home", new {id = "1"})</li>
    Linha 57:         }
    Linha 58:     </ul>
      
    
    Arquivo de Origem: c:\Users\Renato\Documents\Visual Studio 2012\Projects\AR1\AR1\Views\Home\Index.cshtml    Linha: 56 
    

    terça-feira, 26 de fevereiro de 2013 19:02

Respostas

  • Sua variável ambiente.nome é string? Tente dar um cast nela, fazendo uma conversão explícita, dessa forma:

    @Html.ActionLink((string)ambiente.nome, "Index", "Home", new {id = "1"}, null)


    Ao infinito e além!

    • Marcado como Resposta Rnl Rula quarta-feira, 27 de fevereiro de 2013 17:35
    quarta-feira, 27 de fevereiro de 2013 12:18

Todas as Respostas

  • Verifique se o web.config da sua aplicação contem as seguintes linhas:

    <system.web>
    ...
    <pages>
          <namespaces>
            ...
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Html" />
           ...
          </namespaces>
        </pages>
    ...
    </system.web>
    Caso não contenha, adicione-as! Mas pela mensagem de erro, acredito que não seja esse o seu problema (disse aquilo só por precaução). Você modificou o WebHelper ou criou algum método de extensão com nome ActionLink? 


    Ao infinito e além!



    • Editado Fabio R. Luz terça-feira, 26 de fevereiro de 2013 19:24
    terça-feira, 26 de fevereiro de 2013 19:21
  • Realmente já contém no web.config estas linhas. Não modifiquei o WebHelper.. :S
    terça-feira, 26 de fevereiro de 2013 19:27
  • Olhando mais uma vez no seu código, achei algo que não tinha visto antes:

    @Html.ActionLink(ambiente.nome, "Index", "Home", new {id = "1"})

    Você utilizou 4 parâmetros, de forma incorreta, levando em conta que new { id = "1" } seria seu routeValues. Tente trocar por este:

    @Html.ActionLink(ambiente.nome, "Index", "Home", new {id = "1"}, null)
    Este null é referente ao último parâmetro, htmlAtrributes. Tente do jeito acima e veja se funciona!


    Ao infinito e além!

    terça-feira, 26 de fevereiro de 2013 21:04
  • Testei do jeito acima (colocando null em htmlAttributes) porém continua com o mesmo erro.

    :/

    quarta-feira, 27 de fevereiro de 2013 11:23
  • Sua variável ambiente.nome é string? Tente dar um cast nela, fazendo uma conversão explícita, dessa forma:

    @Html.ActionLink((string)ambiente.nome, "Index", "Home", new {id = "1"}, null)


    Ao infinito e além!

    • Marcado como Resposta Rnl Rula quarta-feira, 27 de fevereiro de 2013 17:35
    quarta-feira, 27 de fevereiro de 2013 12:18
  • Agora com o cast funcionou. Estranho que ele já é string... Porém, ele formatou a url errado.

    O que eu queria era:

    http://localhost:1514/Home/Index/0

    Mas ele criou:

    http://localhost:1514/Home/Index/0?id=1

    Sabe se é possível fazer da forma como preciso?

    quarta-feira, 27 de fevereiro de 2013 13:28
  • Vai depender de como estão suas rotas. Sua rota tem que estar configurada +/- dessa forma:

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


    Ao infinito e além!

    quarta-feira, 27 de fevereiro de 2013 17:18
  • Então.. A rota Default já tem e esta configurada desta forma como você mencionou acima...

    Tenho mais uma rota que esta da seguinte forma:

    routes.MapRoute(
                    "HomeIndex",
                    "Home/Index/{id_ambiente}",
                    new { controller = "Home", action = "Index" },
                    new { id_ambiente = "\\d" });


    EDITADO

    Acabei de conseguir... Coloquei o ActionLink da seguinte forma:

    @Html.ActionLink((string)ambiente.nome, "Index", "Home", new {id_ambiente = 1}, null)

    Desta forma funcionou corretamente com a rota que informei acima..

    Obrigado a todos que me ajudaram

    • Editado Rnl Rula quarta-feira, 27 de fevereiro de 2013 17:35 Resolvido
    quarta-feira, 27 de fevereiro de 2013 17:32