未使用 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 时出错