ASP. net MVC Контроллер получает нулевой массив при отправке с Ajax - PullRequest
1 голос
/ 03 апреля 2020

Я занимаюсь этим уже несколько дней. Это должно быть так просто. Почему это не работает? Мой URL выглядит так:

https://example.com/photos/gallery/c15905d7-8216-4e81-ac15-2fafd10b49e8 / 80515cad-070a-4d61-a7e3-f2dbb1968c9d

Я хочу отправить c15905d7-8216-4e81-ac15-2fafd10b49e8 & 80515cad-070a-4d61-a7e3-f2dbb1968c9d моему контроллеру.

Вот последнее, что я попробовал (из 20748 попыток):

function setViewed() {
    var pathArray = window.location.pathname.split('/');

    $.ajax({
        type: "PUT",
        url: '/api/Customers/',
        data: { 'pathArray': pathArray },
        dataType: "json",
        traditional: true,
        success: function (response) {
            alert(response.msg);
        }
    });
}

Контроллер:

[HttpPut]
public IHttpActionResult SeenIt(List<String> pathArray)
{

    // Don't update if it's the client looking at a customer's gallery:
    if (pathArray[3] == User.Identity.GetUserId()){
        return Json(new
        {
            msg = String.Format("ClientID: {0} | CustomerID: {1}", pathArray[3], pathArray[4])
        });
    }

    var customer = db.Customers.FirstOrDefault(c => c.CustomerID == Guid.Parse(pathArray[4]));
    customer.Accessed = true;

    db.SaveChanges();
    return Json(new
    {
        msg = String.Format("ClientID: {0} | CustomerID: {1}", pathArray[3], pathArray[4])
    });
}

Мой массив всегда значение NULL. Есть ли лучший / более простой / эффективный способ сделать это? Тот, который работает? Спасибо!

1 Ответ

1 голос
/ 03 апреля 2020

Опция 1

При вызове ajax нет необходимости переносить строку списка с {}. Просто используйте;

data:pathArray

Опция 2

Создайте класс, который будет служить моделью для привязки свойств.

public class ReceiveModel{
   public List<string> pathArray {get;set;}
}

Тогда в вашем контроллере

public IHttpActionResult SeenIt(ReceiveModel model)
{
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...