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> Edit</span >" }, class: "btnAddEditScope table-button", orderable: false }, { mRender: function (data, type, row) { return "<i class='fa fa-trash btnDeleteRow'></i><span> 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
相关产品推荐
相关产品推荐

