javascript - MVC3 - 将 Json 模型传递给 Controller ​​(字典)

标签 javascript ajax json asp.net-mvc-3 dictionary

当我从ajax调用收到Json数据时,我的模型为空:

这是我的 C# 模型:

public class ErrorReportModel
{
    public bool isSuccess { get; set; }
    public Dictionary<string, ScriptExecResultEntity[]> Errors{get;set;}
}

这是我的 ajax 调用:

   StringJsonLastExecutionReportModel = JSON.stringify(JsonLastExecutionReportModel);
   $.ajax({
    url: urlPath,
    type: 'POST',
    dataType: 'html',
    data: StringJsonLastExecutionReportModel,
    contentType: 'application/json; charset=utf-8',
    success: function (data, status, xhr) {

    },
    error: function (xhr, status, error) {
        alert(error);
    }
   });

Json 数据 (StringJsonLastExecutionReportModel) 如下所示且有效:

{
    "isSuccess": false,
    "Errors": {
        "e794bfa7-657b-482c-acdf-c5a3b6d2ce83": [
            {
                "ErrorMsg": "Invalid object name 'asfasf.CONTACT'.",
                "Id": "63755f2a-1f02-480e-ab94-cafc62fd9634",
                "ScriptContent": "CREATE VIEW [asfasf].Blala AS select * from [asfasf].[CONTACT]",
                "ScriptDescription": "Script 6",
                "ServerType": "SQLSERVER",
                "Success": false
            }
        ]
    }
}

这是我的 Controller 方法:

    public void DisplayErrorsReportAsync(ErrorReportModel model)
    {
        AsyncManager.Parameters["ErrorReportModelObject"] = model;
    }

收到的模型如下所示:

Received Model

为什么我的字典值中的对象为空?

最佳答案

你的ajax调用

  var json= "{\"isSuccess\": false,    \"Errors\": {   \"e794bfa7-657b-482c-acdf-c5a3b6d2ce83\": [        {              \"ErrorMsg\": \"Invalid object name 'asfasf.CONTACT'.\",      \"Id\": \"63755f2a-1f02-480e-ab94-cafc62fd9634\",             \"ScriptContent\": \"CREATE VIEW [asfasf].Blala AS select * from [asfasf].[CONTACT]\",            \"ScriptDescription\": \"Script 6\",      \"ServerType\": \"SQLSERVER\",       \"Success\": false      }     ]  }}";

$.ajax({
        type: "POST",
        url: '/Default1/DisplayErrorsReportAsync?json=' + json,
        data: json,
        dataType: 'json',
        //contentType: false,
        //processData: false,
        success: function (response) {
            alert(response);
            $('#GeneralSection').html(response.responseText);
        },
        error: function (error) {
            $('#GeneralSection').html(error.responseText);
        }
    });

将 json 作为 Controller 中的字符串

在 Controller 中使用

  [HttpPost]
  public ActionResult DisplayErrorsReportAsync(string aaa)
  {    
    JObject o = JObject.Parse(json);
    JArray a = (JArray)o["ErrorReportModel"];
    ErrorReportModel model= a.ToObject<ErrorReportModel>();
  }

注意:使用Newtonsoft.Json

关于javascript - MVC3 - 将 Json 模型传递给 Controller ​​(字典),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20616105/

相关文章:

javascript - JSON 中的浮点零 (0000000000000000E+00) 未在 jQuery (Windows)/JSONLint 中解析

javascript - 如何使用 jQuery (.css) 添加多值(逗号分隔)框阴影?

javascript - 如何在悬停时停止 jQuery 函数并在鼠标离开时启动

javascript - 如何在 yii activeform 的 ajax 参数上传递额外的数据内容?

ajax - 有没有办法删除 native ColdFusion AJAX 加载动画?

Java:Gson更改属性名称而不序列化

Javascript setTimeout 在 ajax 加载的页面中触发多次

javascript - 数组范围问题

javascript - jQuery 不能在 IE 中工作,但可以在其他浏览器中工作

json - 使用GWT播放音频数据