【问题标题】:Pass JSON data to action method将 JSON 数据传递给操作方法
【发布时间】:2017-01-17 11:22:06
【问题描述】:

我正在尝试将 JSON 数据从 ajax 调用传递到我的操作方法 -

Ajax call - 

$.ajax({
         type: "POST",
         url: '/ProjectList/getProjects',
         dataType: "json",
         contentType: "application/json; charset=utf-8",
         data: JSON.stringify(modelData),
         success: function (data) {
                        alert("Testing");
         }
      });

型号 -

EbitModel.cs

public class EbitModel
{
    public string ProgramName { get; set; }
    public string ProjectName { get; set; }
    public string SubprojectName { get; set; }
}

Controller的动作方法——

ProjectListController.cs


    [HttpPost]
    public ActionResult getProjects(List<EbitModel> modelData)
    {
        return null;
    }

但我在此操作方法中的 modelData 中得到了 null。

我在这里有什么遗漏吗?

编辑 -

ModelData 中的 JSON 数据为 -

[{"ProgramName":"South East","ProjectName":"XYZ","SubprojectName":"LMZ"},{"ProgramName":"South East","ProjectName":"ACB","SubprojectName":"LMZa"}]

【问题讨论】:

  • modelData 包含什么?
  • @DanielA.White .. 它包含 JSON 数据 .. E.G. [{"ProgramName":"South East","ProjectName":"XYZ","SubprojectName":"LMN.....]
  • 请显示modelData,问题可能是他们的。控制台有什么错误吗?
  • 尝试使用 var 而不是 List...
  • public ActionResult getProjects([FromBody] List modelData){} 并更改 contentType: 'application/json' not contentType: "application/json; charset=utf-8"

标签: c# json ajax asp.net-mvc


【解决方案1】:

您必须将 modelData 与 Json 一起传递给控制器​​。
试试下面的代码。

var jsonString = [{"ProgramName":"South East","ProjectName":"XYZ","SubprojectName":"LMZ"},{"ProgramName":"South East","ProjectName":"ACB","SubprojectName":"LMZa"}];
var jsonData = JSON.parse('{"modelData":'+jsonString +'}')

$.ajax({
    type: "POST",
    url: '/ProjectList/getProjects',
    dataType: "json",
     contentType: "application/json; charset=utf-8",
     data: jsonData,
     success: function (data) {
        alert("Testing");
     }
});

【讨论】:

  • 不知道为什么.. 但是当我使用方法时我收到内部服务器错误 500
  • @omkarpatade 你在控制器中获得数据了吗?
  • 不..我在我的操作方法中放置了一个断点。但是请求将转到操作方法本身。当我签入控制台时 .. 它给出内部服务器错误 500
  • 我需要在控制器级别进行任何更改(操作方法的参数)吗?
  • 没有一切似乎都很好,需要检查是否缺少某些东西或什么
【解决方案2】:

创建一个变量来保存模型并将这个变量传递给ajax数据

var modelHolder = { "Value": @Model.Value }
$.ajax({
         type: "POST",
         url: '/ProjectList/getProjects',
         dataType: "json",
         contentType: "application/json; charset=utf-8",
         data: modelHolder,
         success: function (data) {
                        alert("Testing");
         }
      });

【讨论】:

    【解决方案3】:

    我找到了一些解决方法 -

    var modelData = { "modelData": dt };
    $.ajax({
              type: "POST",
              url: '/ProjectList/getProjectsFromEbit',
               dataType: "html",
               contentType: "application/json; charset=utf-8",
               data: JSON.stringify(modelData),
                success: function (data) {
    
               },
               error: function (data) {
    
                        }
    
                    });
    

    在控制器中 - 我把那个字符串反序列化了

    public ActionResult getProjectsFromEbit(string modelData)
        {
            var systemOutputList = new List<EbitModel>();
            systemOutputList = JsonConvert.DeserializeAnonymousType(modelData, systemOutputList);
            return PartialView("_getProjects",systemOutputList);
        }
    

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      相关资源
      最近更新 更多