ASP.NET Core MVC Ajax列表显示undefined及视图跳转问题求助
问题解决:Ajax字段显示undefined & RedirectToAction传数据视图不显示
一、Ajax返回数据但所有字段显示'undefined'
核心原因是C#模型字段(PascalCase)与JSON序列化后的字段(默认camelCase)大小写不匹配,前端用item.WorkItemId无法找到序列化后的workItemId字段。
解决方式
1. 前端适配驼峰字段名
直接修改JS中字段引用,将PascalCase改为camelCase:
$.each(data, function (index, item) { var row = $('<tr><td>' + item.workItemId + '</td><td>' + item.workItemType + '</td><td>' + item.typeOfWork + '</td><td>' + item.workItemState + '</td><td>' + item.workItemTitle + '</td><td>' + item.workItemAreaPath + '</td><td>' + item.workItemIterationPath + '</td><td>' + item.workItemTags + '</td><td>' + item.workItemCreatedDate + '</td></tr>'); $('#myTable').append(row); });
2. 后端配置保留原字段大小写
如果不想修改前端,可调整JSON序列化规则:
- .NET Core:在
Startup.cs中添加配置services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; // 禁用驼峰转换 }); - .NET Framework:在
Global.asax中配置GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
3. 验证JSON结构
打开浏览器开发者工具(F12)→ Network标签,查看请求响应的JSON内容,确认字段名与前端调用是否一致。
二、RedirectToAction传递列表数据到新视图不显示
RedirectToAction会发起新HTTP请求,原控制器数据无法自动携带,需通过以下方式传递:
解决方式
1. 使用TempData传递(重定向场景)
TempData可在重定向后保留一次请求的数据,复杂对象需序列化:
// 源控制器方法 public async Task<IActionResult> SourceAction(string selectedAreaPathItems, string selectedIterationPathItems) { List<WorkItemInfo> retrievedWorkItems = await GetAllSelectedWorkItems(selectedAreaPathItems, selectedIterationPathItems); TempData["WorkItems"] = Newtonsoft.Json.JsonConvert.SerializeObject(retrievedWorkItems); return RedirectToAction("TargetView"); } // 目标控制器方法 public IActionResult TargetView() { var json = TempData["WorkItems"] as string; var workItems = Newtonsoft.Json.JsonConvert.DeserializeObject<List<WorkItemInfo>>(json); return View(workItems); }
2. 直接传递模型(非重定向场景)
若无需重定向,直接返回视图并传入模型:
public async Task<IActionResult> YourAction(string selectedAreaPathItems, string selectedIterationPathItems) { List<WorkItemInfo> retrievedWorkItems = await GetAllSelectedWorkItems(selectedAreaPathItems, selectedIterationPathItems); return View("TargetView", retrievedWorkItems); }
视图顶部指定模型类型:
@model List<WorkItemInfo> <table id="myTable"> @foreach(var item in Model) { <tr> <td>@item.WorkItemId</td> <td>@item.WorkItemType</td> <!-- 其他字段 --> </tr> } </table>
额外优化:按钮类型修正
当前按钮为type="submit",点击会触发表单提交导致页面刷新,中断Ajax请求,建议改为:
<input type="button" value="BLAH" onclick="GetSelectedAreaPathChildren2()" />
内容的提问来源于stack exchange,提问作者SpastkChild
相关产品推荐
相关产品推荐

