Форма MVC не отправляется изнутри JQuery модал - PullRequest
0 голосов
/ 08 февраля 2012

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

Это частичное представление, загружаемое внутри модального диалога 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 Ответ

1 голос
/ 14 февраля 2012

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

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

...