2015-03-31 42 views
0

控制器方法獲得ajax發佈數據我正在使用jQuery將一些數據發佈到控制器的方法。我可以成功地發佈如下。如何在.net mvc

POST http://localhost:16161/VisualObjectPairing/SaveParameters HTTP/1.1 

Host: localhost:16161 

Connection: keep-alive 

Content-Length: 146 

Accept: application/json, text/javascript, */*; q=0.01 

Origin: http://localhost:16161 

X-Requested-With: XMLHttpRequest 

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 

Content-Type: application/json 

Referer: http://localhost:16161/VisualObjectPairing/Index 

Accept-Encoding: gzip, deflate 

Accept-Language: en-US;en;q=0.8,en-US;q=0.6,en;q=0.4 

DATA

{"deviceId":"9", 
"SwitchStatus":"6/0/1", 
"InOperation":"6/0/2", 
"selectedInteractiveObjectSet":["5557","5558","5559","5560","5561","5562","5563"]} 

但是,像SwichStatus停止工作動態添加的形式,並且可以與不同的更多的人的數據的字段種類的名字。所以基本上我不能把它們放在控制器方法上作爲參數。

控制器方法是

public JsonResult SaveKnxDeviceParameters(int deviceId, List<int> selectedInteractiveObjectSet = null) 
{ 


} 

的參數,DEVICEIDselectedInteractiveObjectSet自動綁定。非常好。但我想要SwitchStatusInOperation手動從請求(或任何我可以得到的)對象的值,但我找不到任何屬性,給我他們的價值。 Request.Form是空的,所以我不能像Request.Form [「InOperation」]那樣使用它。

我應該在哪裏得到這些值?

+0

你知道他們的名字會是什麼? – Sam 2015-03-31 19:29:12

+0

@Sam我從數據庫中得到名字 – 2015-03-31 20:04:54

+0

然後你可以添加一個全名爲field的類,將它作爲控制器中的第二個參數添加,併發送一個帶有任何名字的json。 – Sam 2015-03-31 20:07:32

回答

1

它們是按名稱自動綁定的。所以,你需要知道這些名字在編譯時或者將它們傳遞的鍵值對集合

{ "deviceId": 9, 
    "parameters": [ {"key": "SwictchStatus", "value": "6/0/1" }, 
        {"key":"InOperation", "value": "6/0/2" }], 
    "selectedInteractiveObjectSet": [] } 

現在「關鍵」和「價值」是靜態的名字。

這裏的一個強類型模型例如:

public class UploadModel 
{ 
    public int deviceId { get; set; } 
    public int[] selectedInteractiveObjectSet { get; set; } 
    public Parameter[] parameters { get; set; } 
} 

public class Parameter 
{ 
    public string key { get; set; } 
    public string value { get; set; } 
} 

public JsonResult SaveKnxDeviceParameters(UploadModel model) 
{ 
    foreach(var item in model.parameters) 
    { 
     var key = item.key; 
     var value = item.value; 
    } 
    ... 
} 
1

爲了傳遞到控制器的其他變量(其被動態添加),則可以在服務器側使用附加的參數Dictionary<string, object> dynamicVariablesDictionary<string, string> dynamicVariables。在這種情況下,您需要將所有動態變量包裝在JS中的單個對象中,並將其傳遞給控制器​​操作中的相應參數。例如。


JS代碼

var deviceId = getDeviceId(); 
var selectedInteractiveObjectSet = getSelectedInteractiveObjectSet(); 
var dynamicVariables = getDynamicVariables(); // assume function returns object like { "SwitchStatus":"6/0/1", "InOperation":"6/0/2"} 
$.ajax({ 
     type: 'POST', 
     url: '/VisualObjectPairing/SaveKnxDeviceParameters', 
     data: { 
       deviceId: deviceId, 
       selectedInteractiveObjectSet: selectedInteractiveObjectSet, 
       dynamicVariables: dynamicVariables 
       }, 
     dataType: 'json', 
     success: function(data) { ... } 
}); 

控制器的動作

public JsonResult SaveKnxDeviceParameters(int deviceId, List<int> selectedInteractiveObjectSet = null, Dictionary<string, string> dynamicVariables) 
{ 


}