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; }
}

我尝试在客户端使用不同的括号类型、撇号等封闭 guid。无济于事。我能忘记什么?!

编辑

我需要澄清我的信息对象的结构定义。控制器设置为接收以下内容。

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
});

请注意,金额将与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: ...
});

在 C# 中接收结束时,我有这个。

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

这给出了null。我不明白为什么。

4

1 回答 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(stuff),

于 2013-11-15T15:04:42.073 回答