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

ASP.NET 6中Ajax调用控制器出现Cannot read properties of undefined错误求助

问题描述

我在ASP.NET 6环境下使用C#与Ajax开发,尝试通过Ajax从表格获取数据并传递至控制器,但持续弹出“Cannot read properties of undefined”错误。我认为该错误与参数相关,但未找到错误提示中提及的问题参数,希望得到解决思路。

相关代码

(function () {
    "use strict"

    window.onload = function () {
        //Reference the DropDownList.
        var ddlYears = document.getElementById("ddlYears");

        //Determine the Current Year.
        var currentYear = (new Date()).getFullYear() + 10;
        var less = (new Date()).getFullYear() - 10;
        //Loop and add the Year values to DropDownList.

        for (var i = less; i <= currentYear; i++) {
            var option = document.createElement("OPTION");
            option.innerHTML = i;
            option.value = i;
            ddlYears.appendChild(option);
        }
    };
    var ScopeTable;

    $(document).ready(function () {
        ScopeTable = $("#tblScopeView").DataTable({
            dom: "Bfrtip",
            paging: true,
            pagingType: "full_numbers",
            buttons: [
                "csvHtml5"
            ],
            columns: [
                { data: 'WBS' },
                { data: 'Title' },
                { data: 'Rev' },
                { data: 'ScopeStatus' },
                { data: 'BCP' },
                { data: 'BCPApprovalDate' },
                { data: 'Manager' },
                { data: 'ProjectControlManager' },
                { data: 'ProjectControlEngineer' },
                {
                    mRender: function (data, type, row) {
                        return "<i class='fa fa-edit btnAddEditScope'></i><span>&nbsp; Edit</span >"
                    },
                    class: "btnAddEditScope table-button",
                    orderable: false
                },
                {
                    mRender: function (data, type, row) {
                        return "<i class='fa fa-trash btnDeleteRow'></i><span>&nbsp; Delete</span >"
                    },
                    orderable: false,
                    class: "table-button"
                }
            ],
            createdRow: function (row, data, index) {
                $(row).attr("data-id", data.WBSNumber);
                $(row).attr("data-month", data.FiscalMonth);
                $(row).attr("data-year", data.FiscalYear);
            }
        });
        $(document).on("click", ".btnAddEditScope", btnAddEditScope_click);
        $("#spnrSave").hide();
    });
    function btnAddEditScope_click() {
        console.log("button clicked")

        $.ajax({
            url: "Scope/AddEditScope",
            type: "GET",
            success: function () {
                $("#vw_AddEditScope").modal("show");
            }
        });
    }
}());

错误信息

错误提示为:Cannot read properties of undefined (reading 'WBS'),指向DataTables初始化时的columns配置部分。

解决思路

  • 校验数据源字段匹配:前端DataTables的columns.data配置使用了WBS,但createdRow中又调用了data.WBSNumber,需确认后端返回的实体类字段名(注意ASP.NET默认会把C#的PascalCase属性序列化为camelCase,比如后端WBSNumber会变成wbsNumber),确保前后端字段名完全一致。
  • 检查数据源完整性:确认后端返回的每条数据都包含所有columns中配置的字段(WBS、Title、Rev等),不存在字段缺失或为null的情况。
  • 调试定位具体错误:在浏览器控制台的createdRow或列渲染函数中打印data对象,查看具体哪条数据的哪个字段未定义,精准定位问题。
  • 补充表格数据加载逻辑:当前代码仅初始化了DataTables,但未看到加载表格数据的Ajax请求,可能是表格初始化时无有效数据源,导致data对象为空,访问字段时出错。需补充从后端获取表格数据并绑定到DataTables的逻辑。
  • 验证DOM元素存在性:确认页面中存在id="tblScopeView"的表格和id="ddlYears"的下拉框,避免因DOM元素未找到引发后续错误。

内容的提问来源于stack exchange,提问作者dovakeen117

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:18:28