C# Ajax将模型作为JSON发送到控制器
我有一个模型,我正试图通过一个Ajax调用从我的视图传递到我的控制器,该调用将模型和另一个数据字符串字符串化,如下所示:C# Ajax将模型作为JSON发送到控制器,c#,ajax,json,asp.net-mvc,C#,Ajax,Json,Asp.net Mvc,我有一个模型,我正试图通过一个Ajax调用从我的视图传递到我的控制器,该调用将模型和另一个数据字符串字符串化,如下所示: SetBinConfig: function (model, range) { var _model = JSON.stringify(model); var rangeSplit = range.split(/[ -]+/); var _rangeSplit = JSON.stringify(rangeSplit); var data =
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);
}
});
},
IdentifiConfig.SetBinConfig(@Html.Raw(Json.Encode(Model)), $('#BinRangesHidden').val());
然后通过此方法接收:
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 });
}
我完全不知道这意味着什么。我知道字典是什么,但是为什么我不能反序列化这个对象呢?我在这里遵循了其他答案,所以我不明白为什么这不起作用
编辑:
模型
是我的模型,由我的JS发送,如下所示:
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);
}
});
},
IdentifiConfig.SetBinConfig(@Html.Raw(Json.Encode(Model)), $('#BinRangesHidden').val());
而
range
只是隐藏的中的一个值。我不会发回我的模型,因为我只需要修改一个值,然后让页面稍后下拉修改后的值。您仍然需要序列化数据
data: JSON.stringify(data),
然后在控制器中,对象应自动解析:
public ActionResult SetBinConfiguration(MyData data)
或者,您可以手动对其进行分析:
public ActionResult SetBinConfiguration(string data)
{
MyData resumeDto = JsonConvert.DeserializeObject<MyData>(data);
...
public ActionResult SetBinConfiguration(字符串数据)
{
MyData resumeDto=JsonConvert.DeserializeObject(数据);
...
你的函数中的模型和范围是什么?为什么你不只是发回你的模型?@StephenMuecke我做了一些编辑。@Html.Raw(Json.Encode(model))
是您在视图中渲染的初始模型的值,因此将其发回已经知道它是什么的控制器是毫无意义的。而$(“#BinRangesHidden”)的值是多少。val()
?@StephenMuecke这并不是毫无意义的,因为我试图手动修改模型的数据,而这无法在视图中完成。这怎么是毫无意义的?这条消息意味着反序列化程序不知道如何将JSON转换为IdentifiBINConfiguration类型。您可以向我们展示您的IdentifiBINConfiguration和DefaultConfigurationModel类吗我确实序列化了我的数据:var\u model=JSON.stringify(model);
。我需要将多个参数发送到我的控制器。很抱歉,您似乎没有阅读我的问题。如果您查看我的问题,您将看到我已经在尝试反序列化我的对象。请在回答之前阅读我的问题。您正在文章前后手动操作字符串。您的JSON解析不正确。能否共享JSON的输出。此外,不清楚您要做什么。