2015-12-02 54 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

相關問題