2012-02-08 12 views
0

MVCで送信されたフォームに問題があります。 2つの異なる点からロードすることができ、1つは送信し、2つ目はポストバックしません。MVCフォームがJQueryモーダルから送信されない

JQueryモーダルダイアログの内部にロードされた部分図です。ホームページからモーダルをトリガーすると、それは正常に送信されます。

フォームを表示するために2番目のモーダルの起動を許可するタスクをユーザーが見つけられるように起動できる別のモーダルがあります。この同じフォームが送信されても​​、コントローラへのポストはトリガされません。

$(document).ready(function() { 
    var title =$(this).attr("data-dialog-title"); 

     $(".NoteDialog").live("click", function (e) { 

      e.preventDefault(); 
      if ($(this).attr("data-dialog-title") != "Find Task") 
      { 
       if ($(this).attr("data-dialog-id") == "deleteDialog") { 
        $("<div id='formModal'><img src='../../Content/images/ajax-loader.gif' /></div>") 
        .addClass("dialog") 
        .attr("id", $(this).attr("data-dialog-id")) 
        .appendTo("body") 
        .dialog({ 
         width: 300, 
         position: [600, 50], 
         title: $(this).attr("data-dialog-title"), 
         close: function() { $(this).remove() }, 
         modal: true, 
         buttons: { 
          "Delete": function() { 
           $("#form0").submit(); 
           $(this).dialog("close"); 
          }, 
          Cancel: function() { 
           $(this).dialog("close"); 
          } 
         } 
        }) 
       .load(this.href); 
       } 
       else 
       { 
        $("<div id='formModal'><img src='../../Content/images/ajax-loader.gif' /></div>") 
        .addClass("dialog") 
        .attr("id", $(this).attr("data-dialog-id")) 
        .appendTo("body") 
        .dialog({ 
         width: 800, 
         position: [300, 50], 
         title: $(this).attr("data-dialog-title"), 
         close: function() { $(this).remove() }, 
         modal: true, 
         buttons: { 
          "Save": function() { 
           alert('Handler for .submit() called.'); 
           $("#form0").submit(); 
           $(this).dialog("close"); 
          }, 
          Cancel: function() { 
           $(this).dialog("close"); 
          } 
         } 
        }) 
       .load(this.href); 
       } 
      } 
      else 
      { 
       $("<div id='formModal'><img src='../../Content/images/ajax-loader.gif' /></div>") 
        .addClass("dialog") 
        .attr("id", $(this).attr("data-dialog-id")) 
        .appendTo("body") 
        .dialog({ 
         width: 860, 
         position: [300, 50], 
         title: $(this).attr("data-dialog-title"), 
         close: function() { $(this).remove() }, 
         modal: true 
       }) 
       .load(this.href); 
      } 
    }); 

    $(".close").live("click", function (e) { 
     e.preventDefault(); 
     $(this).closest(".dialog").dialog("close"); 
    }); 
}); 

それは両方のモーダルダイアログを起動するために使用されます。

はここでjQueryのスクリプトです。アラートが発生し、クローズダイアログも表示されるので、スクリプトは処理中です。送信しないだけです。

部分図が@using (Ajax.BeginForm("AddTime","TimeTracker", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "TimeForm" }))

を使用してフォームを作成し、両方の時間を作らformタグは次のとおりです。

<form action="/TimeTracker/AddTime?AddID=183336&TypeID=1&_=1328710484230" data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#TimeForm" id="form0" method="post"> 

は提出する別の方法はありますか? 私は、機能していたフォーム自体の一部としてボタンを使用しようとしましたが、別の問題がありました。キャンセルボタンはモーダルを正しく閉じることができず、その後の起動時に複数のモーダルがトリガーされます。それが是正できれば、私はこの非掲示問題を回避することができました。

アップデート: FirebugのシナリオをXHRタブで実行しているときに、問題点を発見しました。フォームがFindTaskメソッドにポストするように見えますが、これは最初のモーダルを処理するものです。それは、ホームページから呼び出されたときに起こるものであるAddTimeメソッドへのポストする必要があります。

なぜAJAXはフォームタグで指定されたアクションに投稿しないのですか?

また、送信時にAddTimeフォームからフォームフィールドではなく、FindTaskモーダルに使用されるポストを送信しています。

答えて

1

MVCが両方のダイアログフォームに同じフォームIDを割り当てているという問題が判明しました。最初に見つかったものを提出し、それは間違ったものでした。

フォームに特定のIDを割り当てたら、送信するフォームを指示することができました。

関連する問題