私の状況は次のとおりです。データベースにデータを挿入するダイアログフォームがあります。すべてが検証された後、フォーム情報はデータベースオブジェクトに変換され(linqからsqlへ)、送信されます。 私はjquery ajaxを使ってこれをやっているので、私は(彼のアクションが成功したことを知らせるために)いくつかのメッセージをユーザに表示し、ダイアログを閉じてメインページを更新するsuccess関数を持っています。それが問題です。コントローラのアクションをダウンロードするかどうかを尋ねる奇妙なダウンロードウィンドウが表示され、成功アクションのどれも発生していません。mvc3 json結果ファイルを返す
jQueryの送信機能
//Submete a nova solicitão ao servidor e atualiza a página em caso de sucesso
$("#novaSIForm").submit(function (e) {
e.preventDefault();
$.ajax({
type: "Post",
url: $(this).attr("action"),
cache: false,
data: $(this).serialize(),
success: function (data) {
//Fecha a modal
$("#novaSIModal").dialog("close");
//Após a requisição ter sucesso, atualiza a página
$("#SiContainer").load('@Url.Action("SolicitacoesInternas")');
alert(data.msg);
},
error: function (jqr, errorStatus, errorThrow) {
alert("Erro ocorrido " + errorStatus);
}
});
return false; //Isso faz com o que o form não execute sua ACTION
});
ACTION
public ActionResult SiNovaSI(ChamadoViewModel chVM, string tituloChamado)
{
try
{
CHAMADO ch = new CHAMADO();
ch.InjectFrom(chVM);//Injeta os valores da ViewModel no novo Chamado criado
//Seta outras propriedades que não foram injetadas anteriormente
ch.DATAINICIO = DateTime.Now;
ch.SOLICITANTE = ((USUARIO)Session["UsuarioLogado"]).NOMEREDUZIDO;
ch.STATUS = "SOLICITADO";
ch.VALORDEBITO = ((DEBITO)Session["Debitos"]).VALORPARCELA;
ChamadoManager chMan = new ChamadoManager();
chMan.InsertCHAMADO(ch);//Insere o novo chamado no banco de dados
return Json(new { sucesso = true, msg = "Chamado cadastrado com sucesso" });
}
catch (Exception e)
{
return Json(new { sucesso = false, algo = "Nao foi possível registrar o chamado. Erro: " + e.Message });
}
}
画像
:はここreductedコードです
私はすべての必要なjqueryスクリプトが含まれていることを忘れていました。いくつかのMS Ajaxスクリプトを含む(私がもはやそれを使用していなくても)。この#novaSIForm
が動的に生成された場合、あなたの.submit
を失う可能性がある(多分AJAX呼び出しの後)
dataType: "json",
あなたの正解に感謝します。 DOM要素が置き換えられているようです。今私が理解していないのは、なぜそれが今日働いているのか、昨日それを試してみたことです。実際、 ".live"を使用すると、私のサブミットイベントが2回発生しました。とにかく、クイッククイック答えをありがとう。 – AdrianoRR
@ Adriano-RR、別の '.submit'イベント登録がありますか? '.live'に加えて。 FireBugで2つのAJAXリクエストがトリガされていますか? –
私のHtml.BeginForm()がそれ自身のサブミットを実行していない限り、私は他のサブミットを行いません。これは、$( "#novaSIForm")を介して私のサブミットを呼び出す私のダイアログボタンです。そして、はい、火かき棒は2つのPOSTリクエストと2つのGETを表示しています(これは私の.loadイベントによるものです)。あなたはコード全体を見たいですか? – AdrianoRR