如何在 .net mvc 中的控制器方法上获取 ajax post 数据
How to get ajax post data on controller method in .net mvc
我正在使用 jquery 将一些数据 post 发送到控制器的方法。我可以像下面那样成功 post。
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
数据
{"deviceId":"9",
"SwitchStatus":"6/0/1",
"InOperation":"6/0/2",
"selectedInteractiveObjectSet":["5557","5558","5559","5560","5561","5562","5563"]}
但是数据上的字段像 SwichStatus 和 InOperation 是动态添加的表单,可以有更多的具有不同类型的名称。所以基本上我不能把它们作为参数放在控制器方法上。
控制器方法是
public JsonResult SaveKnxDeviceParameters(int deviceId, List<int> selectedInteractiveObjectSet = null)
{
}
参数deviceId和selectedInteractiveObjectSet自动绑定。非常好。但是我想从请求(或我能得到的任何东西)对象中手动获取 SwitchStatus 和 InOperation 值,但我找不到任何 属性 这给了我他们的价值观。 Request.Form 是空的,所以我不能像 Request.Form["InOperation"].
那样使用它
我应该从哪里获得这些值?
它们自动按名称绑定。所以你需要在编译时知道这些名称或者将它们作为键值对集合传递
{ "deviceId": 9,
"parameters": [ {"key": "SwictchStatus", "value": "6/0/1" },
{"key":"InOperation", "value": "6/0/2" }],
"selectedInteractiveObjectSet": [] }
现在 "key" 和 "value" 是静态名称。
这是一个强类型模型示例:
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;
}
...
}
为了将附加变量传递给控制器(动态添加),您可以在服务器端使用附加参数 Dictionary<string, object> dynamicVariables
或 Dictionary<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)
{
}
我正在使用 jquery 将一些数据 post 发送到控制器的方法。我可以像下面那样成功 post。
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
数据
{"deviceId":"9",
"SwitchStatus":"6/0/1",
"InOperation":"6/0/2",
"selectedInteractiveObjectSet":["5557","5558","5559","5560","5561","5562","5563"]}
但是数据上的字段像 SwichStatus 和 InOperation 是动态添加的表单,可以有更多的具有不同类型的名称。所以基本上我不能把它们作为参数放在控制器方法上。
控制器方法是
public JsonResult SaveKnxDeviceParameters(int deviceId, List<int> selectedInteractiveObjectSet = null)
{
}
参数deviceId和selectedInteractiveObjectSet自动绑定。非常好。但是我想从请求(或我能得到的任何东西)对象中手动获取 SwitchStatus 和 InOperation 值,但我找不到任何 属性 这给了我他们的价值观。 Request.Form 是空的,所以我不能像 Request.Form["InOperation"].
那样使用它我应该从哪里获得这些值?
它们自动按名称绑定。所以你需要在编译时知道这些名称或者将它们作为键值对集合传递
{ "deviceId": 9,
"parameters": [ {"key": "SwictchStatus", "value": "6/0/1" },
{"key":"InOperation", "value": "6/0/2" }],
"selectedInteractiveObjectSet": [] }
现在 "key" 和 "value" 是静态名称。
这是一个强类型模型示例:
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;
}
...
}
为了将附加变量传递给控制器(动态添加),您可以在服务器端使用附加参数 Dictionary<string, object> dynamicVariables
或 Dictionary<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)
{
}