Форма Ajax отправляет вызывающий метод дважды в ASP.NET MVC - PullRequest
0 голосов
/ 23 января 2019

У меня есть странный сценарий, который случается, когда я отправляю свой ajax-запрос, который имеет 2 объекта, при первом прохождении второго объекта obj с правильным значением, в то время как первый объект имеет значение null. При втором вызове он передает первый объект obj со значением и второйobj as null

Вот мой метод ajax

var serializedForm = $(form).serialize();
var postData = {
    merchTask: obj,
    items: arrItems
};
$.ajax({
    type: "POST",
    url: $(form).attr('action'),
    contentType: "application/json; charset=utf-8",
    dataType:'json',
    data: JSON.stringify(postData),
    success: function (response) { 
        alert('done');
    },
     error: function (xhr, status, error) {
         alert("Oops..." + xhr.responseText);
     }
});    

А вот мое действие в контроллере

    public ActionResult EditTask(Task merchTask, string[] items)
    {
        short CompanyID = Convert.ToInt16((gSessions.GetSessionValue(gSessionsData.Company) as Company).ID);
        try
        { 
            merchTask.CompanyID = CompanyID; 
            if (merchTask.TaskID != 0)
            {
                taskTemplatesBF.Update(merchTask);
            }
            else
            {
                taskTemplatesBF.InsertMerchTask(merchTask);
            } 
            string[] selectedLst = items;
            foreach (string item in selectedLst)
            { 
                taskTemplatesBF.InsertItemsLink(CompanyID,merchTask.TaskID,merchTask.ItemCode);
            } 
        }
        catch (Exception ex)
        {
            if (ex.InnerException != null)
            {
                ModelState.AddModelError("", ex.InnerException.Message);
            }
            ModelState.AddModelError("", ex.Message);
        }

        return RedirectToAction("TasksTemplates", "Merch");

    }

* Я нашел обходной путь для отправки каждого объекта отдельно в разных ajaxно что плохого, когда я отправляю их в одном запросе?

1 Ответ

0 голосов
/ 23 января 2019

Вы добавили много кода в вопрос, но пропустили код, который действительно был необходим.

Хорошо, добавьте функции event.preventDefault(); и event.stopImmediatePropagation(); в ваше событие саммита формы следующим образом:

$(document).ready(function(){

  $("formId").on('submit',function(event){

       event.preventDefault();
       event.stopImmediatePropagation();


       var serializedForm = $(form).serialize();
       var postData = {
             merchTask: obj,
             items: arrItems
        };

       $.ajax({
            type: "POST",
            url: $(form).attr('action'),
            contentType: "application/json; charset=utf-8",
            dataType:'json',
            data: JSON.stringify(postData),
            success: function (response) { 
                   alert('done');
             },
            error: function (xhr, status, error) {
                alert("Oops..." + xhr.responseText);
            }
        });    
  });
});

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...