2012-02-08 3 views
0

У меня возникла проблема с формой, представленной в MVC. он может быть загружен из двух разных точек и из одного, который он отправляет, а второй - не обратно.MVC форма не отправляется изнутри JQuery modal

Это частичный вид, загруженный внутри модального диалога JQuery. Когда я запускаю модальную страницу с домашней страницы, она будет подавать штраф.

Существует еще один способ, который можно запустить, чтобы пользователь мог найти задачу, которая затем позволила бы запустить второй модальный вид. Когда эта же форма отправляется, она не вызывает сообщение для контроллера.

Вот скрипт JQuery:

$(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"); 
    }); 
}); 

Он используется для запуска как модальные диалоговые окна. Появляется предупреждение, и диалог закрытия также происходит так, что скрипт обрабатывает, просто не отправляет.

Частичный вид создает форму с помощью @using (Ajax.BeginForm("AddTime","TimeTracker", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "TimeForm" }))

Форма тега производится как раз является:

<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 не отправляет действие, указанное в теге формы?

Он также отправляет сообщение, используемое для модальности FindTask, а не поля формы из формы AddTime при отправке.

ответ

1

Проблема была в том, что MVC присваивал одинаковый идентификатор формы обеим диалоговым формам. Он представит первое, что было найдено, что было неправильно.

Как только я назначил конкретный идентификатор формы, я смог указать, какую форму отправить.

Смежные вопросы