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

jQuery Ajax动态追加的Form表单元素无法正常工作问题求助

问题根因

asp-controller、asp-action、asp-route-* 是ASP.NET Core Razor专属的服务端Tag Helper标记:

  • 你直接把代码写在cshtml文件里时,服务端在渲染页面的阶段会自动解析这些标记,替换成最终生效的href属性,比如把带asp属性的a标签转换成<a href="/MainPage/ShowRecord/123">...</a>,浏览器拿到的是已经生成好正确链接的标签,自然可以正常跳转。
  • 你通过Ajax在前端动态拼接字符串插入DOM时,整个操作是在用户浏览器端、页面已经完成服务端渲染之后执行的,服务端不会再二次处理你前端动态生成的内容,所以这些asp开头的属性会被原样保留在标签上,a标签根本没有生成有效的跳转地址,点击自然没有反应。

另外你代码里还有两个小问题会加剧异常:

  1. a标签上的type="submit"属性是无效属性,submit类型仅对<button>、<input type="submit">生效,a标签本身是超链接元素,不需要这个属性
  2. 拼接a标签时asp-route-id="' + value.id + '"style这段,id属性值和后面的style属性之间缺少空格,会导致浏览器属性解析错误
修复方案

你可以任选以下一种方案修复:

  • 方案1:前端直接拼接正确的href属性(最简便,适合当前场景)
    完全去掉所有asp开头的服务端标记,直接在JS里拼接正确的跳转地址即可,修改后的append代码片段如下:

    $("#loadNotes").append(
        '<div class="container py-3 px-4" style = "background-color: #fff;position:relative; height: 8rem; border: #80808012 solid 1px; box-shadow: blue; margin-bottom: 7px; overflow: hidden; text-overflow: ellipsis;">' +
            '<a class="stretched-link" href="/MainPage/ShowRecord/' + value.id + '" style="color: #6d1cccbf; font-weight: 500; text-decoration:underline;">' + value.title + '</a>' +
            '<p style="color: #5b5454;font-size: 11pt;height: 3rem; white-space:unset" class="text-break text-truncate">' + value.description + '</p>' +
        '</div>'
    );
    

    注:你当前代码中外层包裹的<form>标签没有实际作用(内部没有表单提交控件,a标签是直接跳转而非提交表单),可以直接删掉减少冗余DOM。

  • 方案2:接口返回预生成的跳转地址(适配路由规则变更场景)
    在/MainPage/GetAllRecords接口中,用服务端的Url.Action方法提前生成每条记录的跳转地址,和其他数据一起返回给前端,避免后续路由规则调整时需要同步修改前端拼接逻辑。
    服务端接口示例代码:

    public IActionResult GetAllRecords()
    {
        // 假设原始数据从数据库取出为records集合
        var returnData = records.Select(item => new 
        {
            item.id,
            item.title,
            item.description,
            JumpUrl = Url.Action("ShowRecord", "MainPage", new { id = item.id })
        }).ToList();
        return Json(returnData);
    }
    

    前端拼接时直接用返回的JumpUrl字段赋值给href即可:

    '<a class="stretched-link" href="' + value.JumpUrl + '" style="color: #6d1cccbf; font-weight: 500; text-decoration:underline;">' + value.title + '</a>'
    
  • 方案3:接口返回渲染好的HTML片段(适合复杂列表场景)
    把单条记录的UI封装成Razor局部视图,GetAllRecords接口不返回JSON,直接返回渲染完成的HTML片段,前端拿到响应内容直接append到容器中即可。这种方式下局部视图里的Tag Helper会被服务端正常解析,和你直接写在cshtml里的表现完全一致,缺点是传输的内容体积比JSON大,适合列表结构复杂、包含较多服务端渲染逻辑的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.19 16:15:46