Вопрос

Я просмотрел несколько сообщений здесь в поисках решения.Я попробую новый вопрос.

моя форма:

<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>
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top