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

jQuery循环中使用@Html.ActionLink时item未定义的问题排查

问题描述

我在第一列可正常展示Studentid,但在第四列结合@Html.ActionLink使用时,系统提示“item在当前上下文中未定义”,@Html.ActionLink("Edit", "Edit", new { id = item.Studentid })中的item.Studentid无法正常生效,而前面代码里item的属性可正常调用。

问题截图:
问题截图

相关代码

$.each(data, function (i, item) {
    var stdid = item.Studentid;
    var rows = "<tr>"
    + "<td class='prtoducttd'>" + item.Studentid + "</td>"
    + "<td class='prtoducttd'>" + item.StudentName + "</td>"
    + "<td class='prtoducttd'>" + item.StudentAddress + "</td>"
    + "<td class='prtoducttd'>" 
    + '@Html.ActionLink("Edit", "Edit", new { id = item.Studentid })'   
    + "</td>"

原因与解决方案

核心原因

@Html.ActionLink是后端Razor语法,会在页面服务器渲染阶段执行;而$.each里的item是前端JavaScript变量,只有页面加载完成后在浏览器端才会存在。后端渲染时根本识别不了前端的item变量,所以会报错“item在当前上下文中未定义”。

解决方案

直接用前端拼接HTML的方式生成Edit链接,不要混用后端Razor语法:

$.each(data, function (i, item) {
    var stdid = item.Studentid;
    // 拼接Edit链接的HTML,替换成你的实际控制器名称
    var editLink = '<a href="/你的控制器名/Edit/' + stdid + '">Edit</a>';
    var rows = "<tr>"
    + "<td class='prtoducttd'>" + item.Studentid + "</td>"
    + "<td class='prtoducttd'>" + item.StudentName + "</td>"
    + "<td class='prtoducttd'>" + item.StudentAddress + "</td>"
    + "<td class='prtoducttd'>" + editLink + "</td>"
    + "</tr>";
    // 后续将rows添加到表格的逻辑
});

如果想复用后端路由规则,可以先在页面生成模板再替换:

<!-- 页面中隐藏一个路由模板 -->
<span id="editLinkTpl" style="display:none">@Html.ActionLink("Edit", "Edit", new { id = 0 })</span>
$.each(data, function (i, item) {
    var stdid = item.Studentid;
    // 复制模板并替换ID
    var editLink = $('#editLinkTpl').html().replace('0', stdid);
    var rows = "<tr>"
    + "<td class='prtoducttd'>" + item.Studentid + "</td>"
    + "<td class='prtoducttd'>" + item.StudentName + "</td>"
    + "<td class='prtoducttd'>" + item.StudentAddress + "</td>"
    + "<td class='prtoducttd'>" + editLink + "</td>"
    + "</tr>";
    // 后续逻辑
});

ASP.NET Core项目还可以用Url.Action生成基础路由:

// 先获取后端生成的基础路由地址
var editBaseUrl = '@Url.Action("Edit", "你的控制器名")';
$.each(data, function (i, item) {
    var stdid = item.Studentid;
    var editLink = '<a href="' + editBaseUrl + '?id=' + stdid + '">Edit</a>';
    // 其余代码同上
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:47:32