Есть ли способ получить объект JSON в виде списка моделей представлений и обновить записи в базе данных одним вызовом AJAX? - PullRequest
0 голосов
/ 02 июня 2019

Я хочу обновить некоторые записи в базе данных одним вызовом Ajax, но модель не имеет элементов на стороне сервера.

Я попытался создать объект JSon и передать его в контроллер API через Ajax.

JQUERY:

        var JSONObject = { SortedAnswersViewModel: [] };
        var answer;
        var $listElements = $sortableList.children();

        var orderNumber = 1;
        $.each($listElements, function (i, v) {
            answer = { ID: parseInt(v.id), OrderNumber: orderNumber };
            orderNumber++;
            JSONObject.SortedAnswersViewModel.push(answer);
        });

        console.log(JSON.stringify(JSONObject)); // Here I can see JSON object correctly

        var ajaxRequest = $.ajax({
            type: "POST",
            url: "/api/Cloudition/EditAnswersOrder",
            data: JSON.stringify(JSONObject),
            success: function (data) {
              // Codes...
            },
            error: function (xhr, ajaxOptions, thrownError) {
              // Codes...
            }
        });

Модель:

public class SortedAnswersViewModel
{
    public int ID { get; set; }
    public int OrderNumber { get; set; }
}

Контроллер:

    [HttpPost]
    public string EditAnswersOrder(List<SortedAnswersViewModel> model)
    {
        try
        {
            int i = 1;
            foreach (var item in model)
            {
                int answerID = Convert.ToInt32(item);
                AnswerStep answer = db.AnswerSteps.Where(ans => ans.ID == answerID).FirstOrDefault();
                answer.OrderNumber = i;
                i++;
            }
            db.SaveChanges();
            return "AnswersOrderEdited";
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
    }

Все, что у меня есть в контроллере - это пустой список (количество = 0),Любое решение?На самом деле это возможно?

1 Ответ

0 голосов
/ 02 июня 2019

Это может показаться очень тривиальным, но contentType делает все различия в конвейере HTTP, главным образом потому, что неопределенный contentType использует значение по умолчанию contentType value value (то есть ")применение / х-WWW-форм-urlencoded");в вашем случае, когда ваш веб-API ожидает потребления в формате JSON клиента, вам необходимо настроить contentType: "application / json" .Ваша функция ajax будет такой:

var ajaxRequest = $.ajax({
        type: "POST",
        url: "/api/Cloudition/EditAnswersOrder",
        contentType: "application/json",
        data: JSON.stringify(JSONObject),
        success: function (data) {
          // Codes...
        },
        error: function (xhr, ajaxOptions, thrownError) {
          // Codes...
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...