AJAX-вызовы действия контроллера не согласованы

0

У меня простая форма в ASP.NET MVC4 с одним текстовым полем и двумя кнопками.

@using (Html.BeginForm("Steps", "Technique", new 
                      { step = ViewBag.step + 1, 
                         techniqueId = @Model.Krok.TechniqueId
                      },
                      FormMethod.Post,
                      new { id = "theForm" })
       )
 { 
    <label>@Model.Krok.Text</label>

    @Html.HiddenFor(model => model.Krok.Id)
    @Html.HiddenFor(model => model.Krok.Poradi)
    @Html.HiddenFor(model => model.Krok.TechniqueId)
    @Html.TextBoxFor(m => m.Text)
    if (@Model.Krok.HasMultipleAnswers)

    <input type="button" value="Add One More" id="AddButton" />

    <input type="submit" value="Next Step" id="submit_btn" />
}
<input type="button" value="Add One More" id="add_btn" />
<input type="submit" value="Next Step" id="submit_btn" />

Первая кнопка создает еще одно текстовое поле с использованием jQuery, а вторая кнопка обрабатывает все текстовые поля и сохраняет данные в SQL.

$("#add_btn").click(function () {
        $("#theForm").append("<br /><label> one more attribute</label>")
                     .append("<input type = 'Text' id='_addText' />");
    });

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

$("#submit_btn").click(function () {
        alert("clicked!")
        var options = {};
        options.url = "/Technique/AjaxTest";
        options.type = "POST";
        options.data = JSON.stringify(
        {
            answer: $("#_addText").val()
        });
        options.contentType = "application/json";
        options.dataType = "json";
        options.error = function (jqXHR, status, err) { alert(status); };
        $.ajax(options);
    });

Но это действие контроллера не постоянно отображается, что означает, что иногда действие запускается и обрабатывается, как оно должно обрабатываться, но в другое время действие даже не вызвано (я использовал отладчик). Почему он не работает последовательно?

  • 1
    Отладка сетевого трафика в вашем браузере. Когда должно быть вызвано ваше действие ... отправляет ли браузер запрос? У вас есть собственные маршруты?
  • 0
    Извините, отлаживая трафик, вы хотите использовать что-то вроде wireshark? Или в Chrome есть встроенные отладчики, например? Нет, я немного изменил свои маршруты.
Показать ещё 7 комментариев
Теги:
asp.net-mvc

1 ответ

3
Лучший ответ

Не похоже, что действие по умолчанию нажатия кнопки, то есть HTTP-сообщение POST формы, подавляется, и это, возможно, происходит до того, как действует jQuery.

Если у вас есть

$("#submit_btn").click(handleSubmit);

function handleSubmit(e) {
    e.preventDefault();
    e.stopPropagation();

    alert("clicked");
    ......
}

вы будете иметь HTTP POST в пути.

  • 2
    Хотя более простой ответ - просто заменить type="submit" на type="button" .
  • 0
    ... хороший пикап, +1.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню