CONTROLLER EDIT EXECUTANDO 2 VEZES

MOZARTJUNIOR 23/05/2017 11:11:37
#474134
Tenho uma solution com 2 projetos(API e MVC) na minha view EDIT está sendo executada 2 vezes, nela faço uma chamada ajax, e debugando percebi que após o click ele executa o metodo e logo em seguida executa novamente não sei o motivo vou enviar meu controller e minha chamada ajax

Meu Controller
[HttpPost]
public async Task<ActionResult> Edit(int id ,DEPARTAMENTO departamento)
{
try
{
var client = new ClientApi();

string cliid = Session[[Ô]usuarioLogadoID[Ô]].ToString();

var json = [Ô]{[ô]dep_nome[ô]:[ô][Ô] + departamento.dep_nome + [Ô][ô],[ô]dep_codigo[ô]:[ô][Ô] + departamento.dep_codigo + [Ô][ô],[ô]cli_id[ô]:[ô][Ô] + cliid + [Ô][ô]}[Ô];

var response = await client.PutRequest([Ô]Departamento/[Ô] + id,json);


if (response.IsSuccessStatusCode)
{
TempData[[Ô]Sucesso[Ô]] = [Ô]Departamento alterado com sucesso[Ô];
return RedirectToAction([Ô]Index[Ô],[Ô]Departamento[Ô]);
}
if (response.StatusCode == HttpStatusCode.NotFound)
{
TempData[[Ô]Alerta[Ô]] = [Ô]Código do departamento não encontrado[Ô];
return RedirectToAction([Ô]Edit[Ô]);
}

}
catch(Exception ex)
{
TempData[[Ô]Perigo[Ô]] = ex.Message;
}

return View();

}

Meu Ajax
$(function () {
$([Ô]#btnAlterar[Ô]).click(function () {
//token para o ValidateAntiForgeryToken
var token = $([ô][name=__RequestVerificationToken][ô]).val();
var headers = {};
headers[[ô]__RequestVerificationToken[ô]] = token;

//Pegando o valor da session
var cliente = parseInt(@HttpContext.Current.Session[[Ô]usuarioLogadoID[Ô]]);

//Pegando dados do Departamento
var id = parseInt($([Ô]#dep_id[Ô]).val());
var codigo = parseInt($([Ô]#dep_codigo[Ô]).val());
var cliid = parseInt($([Ô]#cli_id[Ô]).val());

var descricao = $([Ô]#dep_nome[Ô]).val();
debugger;

var serve = JSON.stringify({ issueID: $([Ô]#proselct option:selected[Ô]).val() });
$.ajax({
url : [ô]@Url.Action([Ô]Edit[Ô], [Ô]Departamento[Ô])[ô],
type: [Ô]POST[Ô],
headers: { [ô]__RequestVerificationToken[ô]: token },
datatype: [Ô]json[Ô],
data: { dep_id: id, dep_nome: descricao,dep_codigo: codigo,cli_id:cliid },
success: function (data) {
if (data.Resultado > 0) {

}
},
error: function (xhr) {
alert([ô]Error: [ô] + xhr.statusText);
}
});
});
});
GUIMORAES 23/05/2017 13:43:38
#474136
MOZARTJUNIOR,

Posta o trecho do código que tem o botão.
MOZARTJUNIOR 23/05/2017 14:42:40
#474138
<div class=[Ô]form-group[Ô]>
<div class=[Ô]col-md-6 col-sm-6 col-xs-6 [Ô]>
@Html.ActionLink([Ô]Voltar[Ô], [Ô]Index[Ô], new { Controller = [Ô]Departamento[Ô] }, new { @class = [Ô]btn btn-warning[Ô] })
<input type=[Ô]submit[Ô] value=[Ô]Alterar[Ô] id=[Ô]btnAlterar[Ô] class=[Ô]btn btn-primary[Ô] />
</div>
</div>
GUIMORAES 23/05/2017 16:47:58
#474140
Tenta remover este atributo => type=[Ô]submit[Ô]
Ficando assim.
  <input value=[Ô]Alterar[Ô] id=[Ô]btnAlterar[Ô] class=[Ô]btn btn-primary[Ô] /> 
MOZARTJUNIOR 23/05/2017 16:59:34
#474141
Era isso, jamais imaginaria, value
KERPLUNK 23/05/2017 17:58:33
#474144
Resposta escolhida
Tenho analisado o modo de pensar da maioria do programadores. Sua Controller está executando duas vezes e o que você acha que o que está a mais é o submit. O que está a mais é todo esse AJAX. O submit está no lugar certo, o que tem que sair é esse monte de AJAX
MOZARTJUNIOR 25/05/2017 15:20:08
#474184
Se eu sumir com o AJAX como vou fazer a requisição ?
KERPLUNK 25/05/2017 18:00:33
#474187
Citação:

:
Se eu sumir com o AJAX como vou fazer a requisição ?


Pensa um pouco: você tem rotinas AJAX que estavam chamando o método. No botão também tinha um atributo [Ô]submit[Ô] isso fazia o seu método ser chamado duas vezes. Isso significa que tanto um quanto outro estão chamando o método. O que é mais simples? Uma série de javascript ou um atributo no botão?
GUIMORAES 26/05/2017 13:33:48
#474193
MOZARTJUNIOR

Acontece que você tem um <form> com o método post, que já está fazendo a função para a chamada do seu método no backend. Quando você adicionou o atributo [Ô]Submit[Ô] no seu botão, que está dentro do seu form, o mesmo já entende que ao ser clicado ele irá realizar a chamada no backend.
O que você fez foi atribuir ao botão o comando click no javascript, assim você duplicou a chamada ao método.

Como o Kerplunk disse, você precisa definir o que você quer fazer, entender o que seu código está fazendo.
MOZARTJUNIOR 26/05/2017 13:57:27
#474194
Entendi, mais vou justificar pq criei a chamada ajax, quando criei a view simplesmente o botão não fazia nada, minha solução tem 2 projetos(API ,MVC) não sei pq agora eu deletei a chamada ajax e funcionou o clique do botão ele executa o controller, mais quando criei a view não estava indo para o controller.
MOZARTJUNIOR 26/06/2017 15:40:10
#474750
Citação:

:
:
Se eu sumir com o AJAX como vou fazer a requisição ?
Pensa um pouco: você tem rotinas AJAX que estavam chamando o método. No botão também tinha um atributo [Ô]submit[Ô] isso fazia o seu método ser chamado duas vezes. Isso significa que tanto um quanto outro estão chamando o método. O que é mais simples? Uma série de javascript ou um atributo no botão?


Tópico encerrado , respostas não são mais permitidas