0

I am trying to pass JSON data from ajax call to my action method -

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");
         }
      });

Model -

EbitModel.cs

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

action method of Controller -

ProjectListController.cs


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

But I am getting null here in modelData in this action method.

Is there anything am I missing here?

Edit -

JSON data in ModelData as -

[{"ProgramName":"South East","ProjectName":"XYZ","SubprojectName":"LMZ"},{"ProgramName":"South East","ProjectName":"ACB","SubprojectName":"LMZa"}]
omkar patade
  • 1,442
  • 9
  • 34
  • 66

3 Answers3

1

you have to pass modelData along with Json passing to controller.
Try following code.

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");
     }
});
Pranav Patel
  • 1,541
  • 14
  • 28
0

Create a variable to hold the model and pass this variable to ajax data

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");
         }
      });
kgzdev
  • 2,770
  • 2
  • 18
  • 35
0

I found some work around for this -

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) {

                    }

                });

in controller - i took that string and deserialised it

public ActionResult getProjectsFromEbit(string modelData)
    {
        var systemOutputList = new List<EbitModel>();
        systemOutputList = JsonConvert.DeserializeAnonymousType(modelData, systemOutputList);
        return PartialView("_getProjects",systemOutputList);
    }
omkar patade
  • 1,442
  • 9
  • 34
  • 66