You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:51:10