我有一个模型,我试图通过Ajax调用从我的视图传递给我的控制器,该调用将模型和另一个数据字符串串联起来,如下所示:
SetBinConfig: function (model, range) {
var _model = JSON.stringify(model);
var rangeSplit = range.split(/[ -]+/);
var _rangeSplit = JSON.stringify(rangeSplit);
var data = "model=" +_model + "&rangeSplit=" + _rangeSplit;
$.ajax({
url: '/IdentifiConfig/DefaultConfiguration/SetBinConfiguration',
type: 'POST',
data: "{'data' : '" + data + "'}",
dataType: 'json',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function (data) {
if (data.error == 1) {
cc.jqUtils.openDialog(data.ErrorDescription, 'Error', 'OK', null, null, null);
}
},
error: function (x, h, r) {
console.log(x, h, r);
}
});
},
然后通过这种方法收到:
public ActionResult SetBinConfiguration(string data)
{
string range = data.Split(new string[] { "&rangeSplit=" }, StringSplitOptions.RemoveEmptyEntries)[1];
string tempModelData = data.Split(new string[] {"&rangeSplit="}, StringSplitOptions.RemoveEmptyEntries)[0];
string modelData = tempModelData.Replace("model=", "");
DefaultConfigurationModel model = new JavaScriptSerializer().Deserialize<DefaultConfigurationModel>(modelData);
string[] rangeSplit = Regex.Split(range, " - ");
foreach (IdentifiBINConfiguration ibc in model.IdentifiBINConfigs)
{
if (ibc.LowerRange == rangeSplit[0] && ibc.UpperRange == rangeSplit[1])
{
model.IdentifiBINConfiguration = ibc;
return Json(new { error = 0 });
}
}
return Json(new { error = 1 });
}
然而,我收到此错误:
The value "System.Collections.Generic.Dictionary`2[System.String,System.Object]" is not of type "IdentifiMessenger.Implementations.Identifi.Object.IdentifiBINConfiguration" and cannot be used in this generic collection. Parameter name: value
我根本不知道这意味着什么。我知道字典是什么,但为什么我不能反序列化这个对象?我在这里跟着其他答案,我不明白为什么这不起作用。
编辑:
Model
字面意思是我的模型,从我的JS发送出来:
IdentifiConfig.SetBinConfig(@Html.Raw(Json.Encode(Model)), $('#BinRangesHidden').val());
而range
只是hidden
的值。我没有回复我的模型,因为我只需要修改一个值,然后让页面稍后将该修改后的值拉下来。
答案 0 :(得分:0)
您仍需要序列化数据。
data: JSON.stringify(data),
然后在你的控制器中,你的对象应该自动解析:
public ActionResult SetBinConfiguration(MyData data)
或者,您可以手动解析它:
public ActionResult SetBinConfiguration(string data)
{
MyData resumeDto = JsonConvert.DeserializeObject<MyData>(data);
...