2015-12-02 57 views
2

在asp.net5/mvc6项目中,我创建了一个页面来编辑Azure DocumentDB存储中的文档。我使用jquery将数据发布到控制器操作。如何将动态值的JavaScript对象发布到mvc6控制器操作

从数据库的样品文件看起来像这样:

{ 
    "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) 

但动作里面,然后反序列化参数设置对所有属性“空”值:

{ "key": null, "value": null} 

//编辑 样品的JS代码张贴到行动:

var data = { 
    settings: [{ key: "test", value: 123}] 
} 
$.ajax({ 
    url: 'controller/action', 
    type: 'post', 
    dataType: 'json', 
    data: data 
}); 
+1

动态JSON数据带我到[这个答案](http://stackoverflow.com/a/11608262/3585500),它把我带到[此链接](HTTP://博客。 duc.as/2011/06/07/making-mvc-3-a-little-more-dynamic/),它把我带到[这个链接](http://www.amazedsaint.com/2011/02/aspnet- MVC-动态JSON-jquery.html)。我注意到MVC的转速数字越来越低,所以我停了下来。 = \ – ourmandave

+0

您的代码将哪些js对象发布到操作方法在哪里? – Shyju

+0

我编辑的问题包括javascript – Ben

回答

1

创建一个新的viewmodel像这样。

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

主要问题是我不想使用强类型的类,如'设置',因为'值'可以是任何类型。对于强类型类,它工作正常,但值始终是一个字符串。 – Ben

相关问题