如何将具有动态值的javascript对象发布到mvc6控制器操作
本文关键字:对象 mvc6 操作 控制器 javascript 动态 | 更新日期: 2023-09-27 18:25:23
在一个asp.net5/mvc6项目中,我创建了一个页面来编辑Azure DocumentDB存储中的文档。我使用jquery将数据发布到控制器操作。
数据库中的示例文档如下所示:
{
"key": "name1",
"value": 23
}
属性值可以有不同的类型(数字、字符串等)。
在向控制器发布时,如何保持此值的动态?如果我创建一个这样的类,效果很好:
public class Setting
{
{
[JsonProperty(PropertyName = "key")]
public string Key { get; set; }
[JsonProperty(PropertyName = "value")]
public string Value { get; set; }
}
}
与操作中的强类型参数结合使用:
public async Task<IActionResult> Update(string collectionName, List<Setting> settings)
但现在该值的类型总是字符串。我试着在动作中使用这样的JObject:
public async Task<IActionResult> Update(string collectionName, List<JObject> settings)
但是,操作中反序列化的参数设置的所有属性都具有"null"值:
{ "key": null, "value": null}
//编辑JS代码发布到动作的示例:
var data = {
settings: [{ key: "test", value: 123}]
}
$.ajax({
url: 'controller/action',
type: 'post',
dataType: 'json',
data: data
});
创建这样的新视图模型。
public class CollectionSettings
{
public string CollectionName { set; get; }
public List<Setting> Settings { set; get; }
}
并将其用作你的行动方法的参数
[HttpPost]
public async Task<IActionResult> Update([FromBody] CollectionSettings model)
{
// to do : Do something useful.
return new JsonResult(new {Status = "Success"});
}
当您从客户端发送数据时,请确保使用JSON.stringify
方法将javascript对象转换为Json字符串,并将contentType
属性值指定为"application/json"
。
下面的代码应该可以正常工作。
var items = [];
var item1 = {
"key": "name1",
"value": 23
};
items.push(item1);
var model = { CollectionName: "test", Settings: items };
$.ajax({
url: "@Url.Action("Update","Home")",
type: "POST",
data: JSON.stringify(model),
contentType: "application/json"
}).done(function(r) {
console.log(r);
});