Nano Hash - криптовалюты, майнинг, программирование

Объект Javascript, полученный как null в контроллере mvc

Ниже приведен мой запрос AJAX GET, который пытается передать несколько параметров, включая объект javascript, контроллеру mvc, но объект всегда принимается как null:

 var sort =  { column: 'UserName', order: 'desc' };
 var sortParameter = JSON.stringify(sort);

 $.ajax({
       url: '@Url.Action("GetUsers", "Account")',
       cache: false,
       type: 'GET',
       contentType: 'application/json; charset=utf-8',
       data: { skipRecords: vm.pageIndex * 1000, sortParam: sortParameter },
       success: function (data) {
       }
 });

Метод контроллера выглядит следующим образом:

[HttpGet]
public JsonResult GetUsers(int skipRecords, Sort sortParam, string userName = null)
{

}

Также ниже определен класс Sort:

public class Sort
{
    public string column { get; set; }
    public string order { get; set; }
}

Если я не использую JSON.stringify и передаю только объект javascript, ниже будет отправлен запрос:

GET /Account/GetUsers?skipRecords=0&sortParam%5Bcolumn%5D=UserName&sortParam%5Border%5D=desc&_=1408990051727 HTTP/1.1

  • Я думаю, вы передаете строку, в которой есть JSON, а не объект Sort. Как насчет просто sortParam: sort 25.08.2014
  • @MikeChristensen Да, я пробовал это до выполнения JSON.stringify, но свойства передаются как нулевые. 25.08.2014
  • Можете ли вы запустить Fiddler и вставить точный отправляемый HTTP-запрос? Это, вероятно, поможет людям обнаружить проблему. 25.08.2014
  • @MikeChristensen GET /Account/GetUsers?skipRecords=0&sortParam%5Bcolumn%5D=UserName&sortParam%5Border%5D=desc&_=1408990051727 HTTP/1.1 25.08.2014

Ответы:


1

Вы, вероятно, ищете:

 var sortParameter =  { column: 'UserName', order: 'desc' };

 $.ajax({
       url: '@Url.Action("GetUsers", "Account")',
       cache: false,
       type: 'POST',
       contentType: 'application/json; charset=utf-8',
       data: JSON.stringify({ 
         skipRecords: vm.pageIndex * 1000, 
         sortParam: sortParameter }),
       success: function (data) {
       }
 });

Причина, по которой ваш код не работает, заключается в том, что если вы не используете JSON.stringify для всего результата, он передается как закодированная строка запроса. Вы не можете передать JSON в качестве значения в закодированном значении строки запроса.

Закодированная строка запроса (Post или Get) выглядит так: a=1&b=2&c=3

Таким образом, ваша строка запроса будет выглядеть как skipRecords=5&sortParam={column:'UserName',order:'desc' }

MVC не будет дважды декодировать строку запроса и json.

25.08.2014
  • Я пробовал это, но все же объект содержит нулевые свойства. 25.08.2014
  • Удалите stringify и просто передайте собственный объект. 25.08.2014
  • @BNL Даже при этом свойства принимаются как нулевые. Я добавил запрос GET в свой вопрос, который показывает значения параметров. 25.08.2014
  • Вы НЕ МОЖЕТЕ отправить JSON через GET, связыватель модели по умолчанию не обработает его (поскольку get ВСЕГДА кодируется строкой запроса/url). 25.08.2014
  • POST вместе с JSON.Stringify работает. Можете ли вы добавить тип: «POST» в свой опубликованный код? 26.08.2014

  • 2

    Используйте POST и добавьте [FromBody] к параметру объекта «Сортировка» в методе действия.

    25.08.2014
  • Я использовал POST вместе с JSON.stringify. 26.08.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..