2011-07-26 10 views
0

私の状況は次のとおりです。データベースにデータを挿入するダイアログフォームがあります。すべてが検証された後、フォーム情報はデータベースオブジェクトに変換され(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コードです

enter image description here

私はすべての必要なjqueryスクリプトが含まれていることを忘れていました。いくつかのMS Ajaxスクリプトを含む(私がもはやそれを使用していなくても)。この#novaSIFormが動的に生成された場合、あなたの.submitを失う可能性がある(多分AJAX呼び出しの後)

dataType: "json", 

答えて

1

+0

あなたの正解に感謝します。 DOM要素が置き換えられているようです。今私が理解していないのは、なぜそれが今日働いているのか、昨日それを試してみたことです。実際、 ".live"を使用すると、私のサブミットイベントが2回発生しました。とにかく、クイッククイック答えをありがとう。 – AdrianoRR

+0

@ Adriano-RR、別の '.submit'イベント登録がありますか? '.live'に加えて。 FireBugで2つのAJAXリクエストがトリガされていますか? –

+0

私のHtml.BeginForm()がそれ自身のサブミットを実行していない限り、私は他のサブミットを行いません。これは、$( "#novaSIForm")を介して私のサブミットを呼び出す私のダイアログボタンです。そして、はい、火かき棒は2つのPOSTリクエストと2つのGETを表示しています(これは私の.loadイベントによるものです)。あなたはコード全体を見たいですか? – AdrianoRR

0

Ajax呼び出しでは、明示的にあなたが期待している戻り値の型としてJSONを指定する価値があるかもしれませんDOM要素が置き換えられた場合はハンドラです。したがって、.liveメソッドを使用できます。また

$('#novaSIForm').live('submit', function() { 
    ... 
    return false; 
}); 

また放火魔で送信され、何ジャバスクリプトが存在しないことをされている実際のAJAX要求を検査(場合にはあなたの代わりに.live.submitを使用している)、このイベントのサブスクリプションはdocument.readyイベントハンドラ内部で起こることを確認してくださいエラーが発生します。

+0

私は昨日投稿していませんが、いくつかの異なるデータ型を渡そうとしましたが、いずれも成功していませんでした。実際、私は2分前にそれをテストしました。 – AdrianoRR

関連する問題