Alguém pode me dizer como posso enviar valores para o controlador usando o método ActionLink e POST?
Não quero usar botões.
Eu acho que tem algo com jquery.
asp.net-mvc
actionlink
šljaker
fonte
fonte
Respostas:
Você não pode usar um
ActionLink
porque isso apenas renderiza uma<a>
tag âncora .Você pode usar uma postagem jQuery AJAX .
Ou apenas chame o método de envio do formulário com ou sem jQuery (que seria não-AJAX), talvez no
onclick
caso de qualquer controle que desejar.fonte
Se você estiver usando ASP MVC3, poderá usar um Ajax.ActionLink (), que permite especificar um método HTTP que pode ser definido como "POST".
fonte
jquery.unobtrusive-ajax.min.js
". Caso contrário, ele continuará a fazer um GET em vez de um POST quando clicado. A sintaxe para fazer o link seria a seguinte:@Ajax.ActionLink("Delete", "Delete", new { id = item.Id }, new AjaxOptions {HttpMethod = "POST"})
"data-ajax"="true, "data-ajax-url"=<your link> and "data-ajax-method"="Post"
. A propósito, estou usando ASP.NET MVC 3Você pode usar o jQuery para fazer um POST para todos os seus botões. Basta dar a eles o mesmo nome CssClass.
Use "return false;" no final do seu evento onclick javascript, se você quiser fazer um RedirectToAction do lado do servidor após a postagem, caso contrário, basta retornar a visualização.
Código de navalha
Código JQuery
C #
fonte
A @Aidos deu a resposta certa, só queria deixar bem claro, já que está oculta dentro de um comentário em sua postagem feito por @CodingWithSpike.
fonte
Aqui está uma resposta embutida no projeto padrão da ASP.NET MVC 5 que acredito que cumpre meus objetivos de estilo muito bem na IU. Envie o formulário usando puro javascript para algum formulário que o contém.
O caso de uso totalmente mostrado é uma lista suspensa de logout na barra de navegação de um aplicativo da web.
fonte
ActionLink nunca disparará postagem. Ele sempre aciona a solicitação GET.
fonte
Use o seguinte link de chamada de ação:
Para enviar os valores do formulário, use:
Ele enviará os dados ao controlador do cliente e à ação CustomerSearchResults.
fonte
Use este link dentro de Ajax.BeginForm
;)
fonte
Minha solução para este problema é bastante simples. Eu tenho uma página que faz uma busca do cliente um pelo e-mail inteiro e outro pelo parcial, o parcial puxa e exibe uma lista a lista tem um link de ação que aponta para um resultado de ação chamado GetByID e passa o id
o GetByID extrai os dados do cliente selecionado e retorna
qual é o método post
fonte
Este tem sido um problema difícil de resolver. Como posso construir um link dinâmico em razor e html que pode chamar um método de ação e passar um valor ou valores para um método de ação específico? Considerei várias opções, incluindo um auxiliar de html personalizado. Acabei de encontrar uma solução simples e elegante.
A vista
O método de ação
O ponto aqui é que Url.Action não se importa se o método de ação é GET ou POST. Ele acessará qualquer tipo de método. Você pode passar seus dados para o método de ação usando
o objeto routeValues. Eu tentei isso e funciona. Não, você não está tecnicamente fazendo uma postagem ou enviando o formulário, mas se o objeto routeValues contiver seus dados, não importa se é uma postagem ou um get. Você pode usar uma assinatura de método de ação específica para selecionar o método correto.
fonte
Eu fiz o mesmo problema usando o seguinte código:
fonte
Esta é a minha solução para o problema. Este é o controlador com 2 métodos de ação
Em View, eu renderizo a construção seguindo a estrutura.
Ponto de interesse no Razor View :
Função JavaScript
confirmDelete(id)
que é chamada quando o link gerado com@Html.ActionLink
é clicado;confirmDelete()
função necessária id do item que está sendo clicado. Este item é passado doonClick
manipuladorconfirmDelete("+feedback.Id+");return false;
Preste atenção que o manipulador retorna falso para evitar a ação padrão - que é obter a solicitação para o destino.OnClick
O evento para botões pode ser anexado com jQuery para todos os botões da lista como alternativa (provavelmente será ainda melhor, pois haverá menos texto na página HTML e os dados poderão ser passados viadata-
atributo).O formulário tem
id=myForm
, para encontrá-lo emconfirmDelete()
.A forma inclui
@Html.HttpMethodOverride(HttpVerbs.Delete)
para usar oHttpDelete
verbo, como ação marcada com oHttpDeleteAttribute
.Na função JS eu uso a confirmação de ação (com ajuda de um plugin externo, mas a confirmação padrão também funciona. Não se esqueça de usar
bind()
em call back ouvar that=this
(o que você preferir).O formulário possui um elemento oculto com
id='idField'
ename='id'
. Portanto, antes que o formulário seja enviado após a confirmação (result==true
), o valor do elemento oculto é definido como o argumento valor passado e o navegador enviará os dados ao controlador como este:URL do pedido :
http://localhost:38874/Feedback/Delete
Método de solicitação : Código de status POST: 302 encontrado
Cabeçalhos de resposta
Localização: / Feedback Host: localhost: 38874 Form Data X-HTTP-Method-Override: DELETE id: 5
Como você pode ver, é uma solicitação POST com X-HTTP-Method-Override: DELETE e os dados no corpo definidos como "id: 5". A resposta tem 302 código que redireciona para a ação de índice, por isso você atualiza sua tela após a exclusão.
fonte
Eu recomendaria permanecer puro para os princípios REST e usar uma exclusão HTTP para suas exclusões. Infelizmente, as especificações HTML têm apenas HTTP Get & Post. Uma tag só pode ser HTTP Get. Uma tag de formulário pode fazer um HTTP Get ou Post. Felizmente, se você usar ajax, poderá fazer um HTTP Delete e é isso que eu recomendo. Veja a seguinte postagem para obter detalhes: Http Deletes
fonte
Chamar $ .post () não funcionará porque é baseado em Ajax. Portanto, um método híbrido precisa ser usado para esse propósito.
A seguir está a solução que está funcionando para mim.
Passos: 1. Crie URL para href que chama o método a com url e parâmetro 2. Chame POST normal usando o método JavaScript
Solução:
Em .cshtml:
Nota: o método anônimo deve ser delimitado por (....) (), ou seja,
postGo é definido como abaixo em JavaScript. O descanso é simples ..
@ Url.Action ("View") cria url para a chamada
{'id': @ recibo.ReceiptId} cria parâmetros como objeto que por sua vez é convertido em campos POST no método postGo. Pode ser qualquer parâmetro que você precisar
Em JavaScript:
URLs de referência que usei para postGo
GET / POST não ajax usando jQuery (plugin?)
http://nuonical.com/jquery-postgo-plugin/
fonte
jQuery.post()
funcionará se você tiver dados personalizados. Se você quiser postar um formulário existente, é mais fácil de usarajaxSubmit()
.E você não precisa configurar esse código em
ActionLink
si, já que pode anexar um manipulador de link nodocument.ready()
evento (que é o método preferido de qualquer maneira), por exemplo, usando o$(function(){ ... })
truque jQuery.fonte
Deparei com a necessidade de POSTAR de uma página de pesquisa (índice) para a página de resultados. Não precisei de tanto quanto @Vitaliy declarou, mas me apontou na direção certa. Tudo que eu tive que fazer foi isto:
Meu controlador tinha o seguinte método de assinatura:
fonte
Isso é retirado do projeto de amostra MVC
fonte