[英]Posting array of strings to .net-core mvc
问题:
我正在尝试通过jquery post发送一个字符串数组,但是它们没有被正确解析,我得到的只是列表中的null。
JavaScript的:
var array = [];
array.push("test")
array.push("test2")
array.push("tes3")
$.post("Admin/FilteredKeys", $.param(JSON.stringify({ Ids: array, OnlyActive: true }, true)));
C#模型:
public class MySearch
{
public bool OnlyActive { get; set; } = true;
public List<string> Ids { get; set; }
}
控制器中的动作:
public async Task<IActionResult> FilteredKeys(MySearch filter)
{
var data = await _service.GetFilteredKeyTypes(filter);
return View();
}
我已经在Google上搜索了一下,发现传统属性需要设置为true,但它保持不变,我也尝试了以下代码段:
$.ajax({
type: "POST",
url: "Admin/FilteredKeys",
data: postData,
success: function(data){
alert(data.Result);
},
dataType: "json",
traditional: true
});
这是一个.net核心项目,我还需要在某个地方更改其他参数吗?
编辑:
忘记添加我的原始尝试是这样的:
$.Admin.worker.postJson("Admin/FilteredKeys", JSON.stringify({ Ids: array, OnlyActive: true }), function (data) {
var t = "";
});
postJson: function (url, data, callback) {
$.LoadingOverlay("show");
$.ajax({
url: url,
type: 'POST',
data: data,
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (callback)
callback(data);
$.LoadingOverlay("hide");
},
error: function (event, jqxhr, settings, thrownError) {
//$.helpers.errorHandler($("#fileDialogErrors"), event.responseText);
$.LoadingOverlay("hide");
}
});
}
由于我认为接受的答案不正确-这是替代方法(与此处的其他答案类似,但不相同)。 首先,您需要使用FromBody
属性装饰模型:
public async Task<IActionResult> FilteredKeys([FromBody] MySearch filter)
{
var data = await _service.GetFilteredKeyTypes(filter);
return View();
}
而ajax调用应如下所示:
var array = [];
array.push("test")
array.push("test2")
array.push("test3")
$.ajax({
type: "POST",
url: "Admin/FilteredKeys",
data: JSON.stringify({ Ids: array, OnlyActive: true}),
contentType: "application/json; charset=utf-8",
success: function(data){
// ...
},
failure: function(errMsg) {
// ...
}
});
为什么不这样:
$.post("Admin/FilteredKeys",{ Ids: JSON.stringify(array), OnlyActive: true });
这个答案是为了替代(如果有人会喜欢此解决方案):
$.post("Admin/FilteredKeys", { Ids: array, OnlyActive: true });
太确定控制器试图从主体中解析模型,您可以添加FromBody属性:
public async Task<IActionResult> FilteredKeys([FromBody] MySearch filter)
{
...
}
另外,您应该在请求中添加application / json内容类型:
$.ajax({
type: "POST",
url: ...,
data: ...,
success: ...
contentType: "application/json"
});
$.ajax({
type: "POST",
url: "Admin/FilteredKeys",
data: { filter: postData},
success: function(data){
alert(data.Result);
},
dataType: "json",
traditional: true
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.