MVC form Method = 'post' с двумя кнопками отправки
-
21-12-2019 - |
Вопрос
Я просмотрел несколько сообщений здесь в поисках решения.Я попробую новый вопрос.
моя форма:
<form method="post" action="@Url.Action("Manage")" data-cs-ajax="true" data-cs-target="#catalogList" >
Он имеет поле автозаполнения и пейджинг, очень похожее на пример OdeToFood от Скотта Аллена.
Есть :
<input type="submit" value="Update" class="btn btn-default" />
который обновляет некоторые отфильтрованные элементы до выбранных - все работает отлично, а также:
<input type="submit" name="btnSave" id="btnSave" value="Save" class="btn btn-default" />
Они оба успешно попали:
//POST: /WebCatalog/Manage/5
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage([Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{ ...
Они попадают в действие контроллера из-за JavaScript:
$(function () {
var ajaxFormSubmit = function () {
var $form = $(this);
var options = {
url: $form.attr("action"),
type: $form.attr("method"),
data: $form.serialize()
};
$.ajax(options).done(function (data) {
var $target = $($form.attr("data-cs-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
var options = {};
$newHtml.effect("highlight", options, 500, doneEffect);
});
return false;
};
Сейчас...
Я хочу установить поле в модели, чтобы контроллер знал, что была нажата вторая кнопка btnSave... чтобы сохранить запись, конечно....
Су...
$(function () {
$("#btnSave").click(function () {
$("isSubmitted").val("1");
return true;
});
});
И это срабатывает:перед отправкой страницы через ajax в ajaxFormSubmit код jQuery кнопки для $(#btnSave") успешно срабатывает.
Однако в действии контроллера isSubmited всегда равен 0.
Я пробовал :
$("isSubmitted").val(1);
Я попробовал форму как метод = 'get', но сообщения до сих пор нет - хотя я мог бы попытаться затем изменить метод с помощью javascript в функции btnSave.click js - не знаю, как это сделать... если смогу' Если я не сохраняю значение в элементе управления формой, то зачем мне менять метод формы??
Я пробовал $Ajax.ActionLink, но всегда получаю ошибку 500 IIS.
По сути, мне нужен способ узнать, что пользователь нажал кнопку «Сохранить», а не кнопку «Обновить».
Любой совет приветствуется!
Решение
@Robert Achmann, вот мой ответ
Кажется, селектор в $ («iSsubmated») отсутствует, например,$ («# Issubmated») для ввода с идентификатором выпуклом.
Другие советы
Вам не нужно скрытое значение, чтобы сообщить контроллеру, какая кнопка была нажата.Что вам нужно сделать, это назвать две кнопки следующим образом:
<input type="submit" name="btnAction" value="Update" class="btn btn-default" />
<input type="submit" name="btnAction" value="Save" id="btnSave" class="btn btn-default" />
Как видите, у них одинаковое имя, но разные значения (обновить или сохранить).
В контроллере добавьте еще один параметр с именем btnAction
, название кнопок действия.
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage(string btnAction, [Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{
if(btnAction.ToLower() == "save")
{
// The save button was clicked
}
else if(btnAction.ToLower() == "update")
{
// The update button was clicked
}
else
{
// default ...
}
}
По сути, параметр btnAction
получит значение кнопки отправки, запускающей форму для получения сообщения.
Надеюсь, это поможет.
Вы можете скрыть поле в своей форме, чтобы сохранить значение, которое было нажато значение (управляется этим с обработчиками событий jQuery), и для этого вы можете сделать ваш тип кнопки= «Кнопка» вместо типа= «Отправить» (Чтобы отправить форму из вашего кода jQuery) или вы можете использовать EventPreventDefault.
Ну вот образец кода, который может помочь вам:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("#bt1").click(function(){
alert(' Save button');
$("#operation").val('save');
$("#frm").submit();
});
$("#bt2").click(function(){
alert(' Update button');
$("#operation").val('update');
$("#frm").submit();
});
});
</script>
</head>
<body>
<form id="frm">
<div id="div1"><h2> Form buttons - What of then was clicked? </h2></div>
<button id="bt1"> Save button </button>
<button id="bt2"> Update button </button>
<input type="hidden" id="operation" name="operation" value=""/>
</form>
</body>
</html>
.