【问题标题】:Can't POST an array of string to ASP.NET MVC3无法将字符串数组发布到 ASP.NET MVC3
【发布时间】:2017-08-29 10:02:42
【问题描述】:

我有一个 MVC3 控制器动作:

public ActionResult DoStuff(DoStuffModel model)

DoStuffModel 看起来像这样:

public class DoStuffModel
{
    public long SomeId { get; set; }
    public List<string> Codes { get; set; }
}

在我的 jQuery 中,我这样做:

 var postData = {
     SomeId: 1,
     Codes: ["code1", "code2", "code3"]
 };

$.post(url, postData, function (data) {});

网址正确。 postData 在我登录时看起来像这样:

SomeId 被正确绑定,但 Codes 仍然为空。怎么回事?

【问题讨论】:

  • 您的模型需要一个名为 Codes 的数组,但在您的开发工具中,它显示在 javascript 对象中数组名称是 PiCodes。你能检查一下这是否有帮助吗?
  • 只是猜测,但你试过public string[] Codes { get; set; }
  • 我的截图不好,抱歉。不过名字是一致的。
  • 请设置application content-type = "application/json"

标签: jquery asp.net asp.net-mvc asp.net-mvc-3


【解决方案1】:

您需要使用$.ajax() 方法并设置正确的ajax 选项并将您的数据字符串化。

$.post() 方法将数据作为application/x-www-form-urlencoded; charset=UTF-8 发送,这意味着您需要使用索引器生成集合,以便DefaultModelBinder 绑定它 - 例如

var postData = { SomeId: 1, 'Codes[0]': 'code1', 'Codes[1]': 'code2', 'Codes[2]': 'code3'};

使用包含数组的当前对象的代码将是

$.ajax({
    url: url,
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify({ model: postData })
    success: function(data) {
        ....
    }
});

【讨论】:

  • 感谢您的帮助!但是,[0].Codes 似乎不是正确的语法。至少我的 Intellisense 似乎对此有所抱怨。
  • 对不起,忘记引号了(注意在这种情况下你也可以使用'Codes[0]'(简单对象的集合)
  • 由于您要发送 JSON,因此您不需要使用 Codes[0]。 OP 的原始 postData 是正确的,他只是缺少 application/json 标头。
  • @DarinDimitrov,我知道 - 我在解释如何在不设置 contentType 选项的情况下生成数据:)
  • 谢谢。但是,您的选择似乎都不起作用。甚至SomeId 也不会以这种方式绑定。
猜你喜欢
  • 2011-06-14
  • 2012-12-21
  • 1970-01-01
  • 2019-03-30
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
相关资源
最近更新 更多