Проектирование данных в $ .ajax для соответствия определению модели на стороне сервера

0

Я запускаю следующий вызов AJAX.

var submission = {};
submission.input = [];
submission.input.push({ Id: "{ab684cb0-a5a4-4158-ac07-adff49c0c30f}" });
submission.input.push({ Id: "{bb684cb0-a5a4-4158-ac07-adff49c0c30f}" });
$.ajax({
  url: "http://" + "localhost:49642/Controller/Action",
  data: submission
});

Он работает так, как предполагалось, и в моем контроллере я могу видеть два элемента. Тем не менее, поля Id являются целыми нулями. Я уверен, что мне не удалось сопоставить определение объекта со стороны сервера, но сейчас я буду раздражен и разочарован, чтобы генерировать больше предложений о том, как переместить данные в службу.

Модель данных такова.

public class Thingy
{
  public Guid Id { get; set; }
  public IEnumerable<Guid> Blobb { get; set; }
}

Я пытался использовать разные типы кронштейнов, апострофы и таковые, охватывающие контуры на стороне клиента. Но безрезультатно. Что я могу забыть?!

редактировать

Мне нужно уточнить структурное определение моего информационного объекта. Контроллер настроен на получение следующего.

public ActionResult SelectionStorage(IEnumerable<Stuff> stuff)
{
  Session["Stuff"] = stuff;
  return null;
}

Определение класса Stuff более сложное, но в качестве POC будет достаточно следующего:

public class Stuff
{
  public Guid Id { get; set; }
  public IEnumerable<Guid> Ids { get; set; }
  public Dictionary<String, decimal> Amounts { get; set; }
}

Таким образом, на клиенте я выполняю следующую настройку предоставленного объекта данных.

var submission = {};
var subIds = [];
subIds.push("{ab684cb0-a5a4-4158-ac07-adff49c0c30f}");
subIds.push("{bb684cb0-a5a4-4158-ac07-adff49c0c30f}");
submission.input = [];
submission.input.push({
  Id: "{cb684cb0-a5a4-4158-ac07-adff49c0c30f}",
  Ids: subIds,
  Amounts: null
});

Обратите внимание, что суммы будут отличаться от нуля, но эта головная боль, к которой я еще не получил, пока еще не получил.

Изменить 2

Новая попытка - более простой подход. В JS я отправляю следующее.

var stuff = {};
stuff.input = [];
stuff.input.push("{ab684cb0-a5a4-4158-ac07-adff49c0c30f}");
stuff.input.push("{bb684cb0-a5a4-4158-ac07-adff49c0c30f}");

$.ajax({
  url: ...,
  data: stuff,
  type: "POST",
  success: ...,
  error: ...
});

При получении кода на С# у меня это есть.

public ActionResult MyAction(List<String> input) { ... }

Это дает значение null. Я не понимаю, почему.

  • 0
    Насколько я понимаю, представление будет удалено на стороне контроллера, так как оно просто используется для передачи данных. Таким образом, на контроллере у вас должен быть вход List <String> в качестве входного параметра. Вы упомянули, что видели 2 элемента, так что я предполагаю, что у вас есть что-то подобное. Вы можете опубликовать эту строку с вашего контроллера?
Теги:
asp.net-mvc

1 ответ

1

Вы должны иметь возможность упростить jquery. С тем, что у вас здесь, вам не нужно представление. Если вы отправляете сложный список обратно на контроллер, вам нужно указать свои переменные, но поскольку вы просто отправляете строку обратно, вам не нужно это делать. Попробуйте изменить данные на

var input = [];
input.push("{ab684cb0-a5a4-4158-ac07-adff49c0c30f}");
input.push("{bb684cb0-a5a4-4158-ac07-adff49c0c30f}");

затем в вызове ajax

data: input,

или

data: Json.stringify(input);

затем на вашем контроллере

public ActionResult Action(List<String> input){...

Редактировать:

попробуйте изменить jquery на это:

var stuff= {};
stuff.Id = "{cb684cb0-a5a4-4158-ac07-adff49c0c30f}";
stuff.Ids= [];
stuff.Ids.push("{ab684cb0-a5a4-4158-ac07-adff49c0c30f}");
stuff.Ids.push("{bb684cb0-a5a4-4158-ac07-adff49c0c30f}");

то в вашем ajax есть данные: материал или данные: Json.stringify (материал),

  • 0
    На самом деле, структура немного сложнее, чем это. Пожалуйста, взгляните на мои изменения и посмотрите, есть ли у вас что-то мудрое, чтобы внести свой вклад. :)
  • 0
    Я внес некоторые изменения в ваш jquery и поместил его в редактирование. Попробуйте и дайте мне знать.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню