У меня простая форма в 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);
});
Но это действие контроллера не постоянно отображается, что означает, что иногда действие запускается и обрабатывается, как оно должно обрабатываться, но в другое время действие даже не вызвано (я использовал отладчик). Почему он не работает последовательно?
Не похоже, что действие по умолчанию нажатия кнопки, то есть HTTP-сообщение POST формы, подавляется, и это, возможно, происходит до того, как действует jQuery.
Если у вас есть
$("#submit_btn").click(handleSubmit);
function handleSubmit(e) {
e.preventDefault();
e.stopPropagation();
alert("clicked");
......
}
вы будете иметь HTTP POST в пути.
type="submit"
на type="button"
.