C# Ajax将模型作为JSON发送到控制器

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 =

我有一个模型,我正试图通过一个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);
        }
    });
},
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的输出。此外,不清楚您要做什么。