未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确

Posted

技术标签:

【中文标题】未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确【英文标题】:Not getting the LINQ join query result in Ajax success method from Json Result using MVC however the result is shown correctly 【发布时间】:2021-12-26 03:27:39 【问题描述】:

我正在尝试将控制器的 LINQ 连接查询结果(连接三个表)从 Json Result 传递给 Ajax 成功函数,但我没有得到任何值,这意味着成功函数没有运行并且它执行错误函数。查询生成了正确的结果,并且当我在 return Json(query) 或 return new JsonResult Data = query, JsonRequestBehavior = JsonRequestBehavior.AllowGet ; 上放置断点时,查询变量包含数据。问题是生成的查询结果没有从控制器传递到 ajax 函数。我尝试了其他可能的解决方案,但没有取得任何成功。

注意:我创建了模型类来存储连接查询结果。 任何有关这方面的指导将不胜感激 提前致谢。

这里是我的控制器代码

[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 mark1 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 ;
    

模型类

    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; 
    

查看代码

    @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>

【问题讨论】:

【参考方案1】:

尝试改变动作

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

【讨论】:

【参考方案2】:

使用时:

select new ScoreViewModel

  partVm = p,
  enrollVm = e,
  markVm = m
 

可能发生的情况是序列化过程也在处理您的所有子对象,并且可能会遇到问题。您收到任何错误吗?我感觉序列化过程可能会使其复杂化。

要对此进行测试,请尝试直接返回您需要的所有属性,例如:

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

【讨论】:

以上是关于未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确的主要内容,如果未能解决你的问题,请参考以下文章

导入时获取返回未定义

未使用 mysqli bind_result 从数据库中获取值

在 asp.net mvc 登录项目中解析 json 时出错

如何使用 json 从 web.api 获取返回值到 mvc 控制器?

MVC5-3 Result分析

来自前端的 Json 数据未通过后端使用 Knockout 和 MVC 插入到数据库中