Muneeba
Muneeba

Reputation: 47

Not getting the LINQ join query result in Ajax success method from Json Result using MVC however the result is shown correctly

I am trying to pass LINQ join query result(joining three tables ) from the controller to Ajax success function from Json Result but I am not getting any value means success function did not run and it executes error function . the query generated the correct result and also when I placed the breakpoint on return Json(query) or return new JsonResult{ Data = query, JsonRequestBehavior = JsonRequestBehavior.AllowGet };, the query variable contains the data . the problem is that the generated query result is not passed from the controller to the ajax function. I have tried other possible solutions but did not get any success.

Note : I have created model class to store the join query result. any guidance regarding this will highly be appreciated Thanks in advance.

here my controller code

[HttpPost]
    public JsonResult getscore(int val)
    {
        Debug.WriteLine("checking {0}", val);
        var g = val;
        List<Participant_info> p_details = context.Participant_info.ToList();
        List<Participant_enrolled> e_details = context.Participant_enrolled.ToList();
        List<Contest_marking> mark = context.Contest_marking.ToList();

        var query = (from p in p_details
                     join e in e_details on p.stud_id equals e.stud_id 
                    
                     join m in mark on e.E_id equals m.E_id 
                     
                     select new ScoreViewModel
                     {
                         partVm = p,
                         enrollVm = e,
                         markVm = m
                     }).ToList();

        foreach (var u in query)
        {
            Debug.WriteLine("name {0} mark{1} Contest_id {2} ", u.partVm.stud_name, u.markVm.C1st_marks, u.enrollVm.Contest_id);
        }
        return Json(query, JsonRequestBehavior.AllowGet);
        //return new JsonResult { Data = query, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

Model class

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace CEN_CONTEST_MGT_SYSTEM.Models
{
    public class ScoreViewModel
    {
        public Participant_info partVm { get; set; }
        public Participant_enrolled enrollVm { get; set; }
        public Contest_marking markVm { get; set; }
    }
}

View code

    @model IEnumerable<CEN_CONTEST_MGT_SYSTEM.Models.ScoreViewModel> 
@{
    ViewBag.Title = "score";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>score</h2>
@Html.DropDownList("Trial", "---  Tous  ---")
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript">
    $("#Trial").change(function () {
        val = $("#Trial").val();
        alert("fff" + val);
        //var data = JSON.stringify({

          //  'val': val
        //});

        $.ajax({
            type: "POST",
            url: "/judge_dashboard/getscore",
            data: JSON.stringify({'val': val}),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            processData: false,
            cache: false,
            success: function (data) {
                alert("hello");
            },
            error: function () {
                alert("error");
                
            }
        })



    })
</script>

Upvotes: 0

Views: 82

Answers (2)

Brian Mains
Brian Mains

Reputation: 50728

When using this:

select new ScoreViewModel
{
  partVm = p,
  enrollVm = e,
  markVm = m
 }

Likely what's happening is the serialization process is also processing all of your child objects, and may be running into a problem with that. Is there any error that you are receiving? I have a feeling the serialization process might be complicating it.

To test that, try returning all the properties you need directly such as:

return Json(new {
   x = vm.partVm.X,
  y = vm.enrollVm.Y
}, JsonRequestBehavior.AllowGet);

Upvotes: 0

Serge
Serge

Reputation: 43880

try to change the action

 public ActionResult<List<ScoreViewModel>> getscore(int val)
    {
          ... your code
        return Ok(query);
    }

Upvotes: 0

Related Questions