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

通过JS动态生成的链接向控制器传参时点击无响应问题

问题原因
  • asp-action、asp-controller、asp-route-*都属于ASP.NET Core的服务器端Tag Helper属性,仅在服务器渲染.cshtml视图的阶段会被解析,自动生成对应的href属性。你在客户端JS运行时动态拼接HTML字符串的阶段,服务器已经完成了页面渲染流程,不会再识别处理这些Tag Helper属性,所以最终生成的a标签没有有效href属性,点击自然没有响应。
解决方案

你可以提前在服务器端生成目标接口的基础URL,再在JS里拼接动态的userId参数即可,修改后的代码参考如下:

@if(ViewData[Enums.States.UserSelectWindow.ToString()].ToString() == "True") {
<script type="text/javascript">
    $("#UserlistCollectionId").css('height', $("#WindowUserSelectId").height() + 'px');

    // 提前在服务器端生成携带groupId的基础请求URL
    const addUserBaseUrl = '@Url.Action("AddUserToGroup", "Settings", new { groupId = Model.Group.Id })';
    let users = @Html.Raw(Json.Serialize(UserModel.GetUsers()));

        function Clear() {
            $("#UserlistCollectionId").empty();
        }

        function FillAll(users) {
            Clear();
            for (user of users) {
                // 直接拼接完整href属性,不再使用服务器端Tag Helper
                $("#UserlistCollectionId").append('<li class="list-group-item"><div class="row justify-content-between"><div class="col-auto">' + user.name + '</div><div class="col-auto"><a class="btn btn-sm btn-success" href="'+ addUserBaseUrl +'?userId='+user.id+'">Wybierz</a></div></div></li>');
            }
        }

        FillAll(users);

        $("#SearchInputId").keyup(function () {
            Clear();
            let searchValue = $("#SearchInputId").val();
            if (searchValue === "")
                FillAll(users);
            else {
                for (user of users) {
                    if (user.name.includes(searchValue)) {
                        $("#UserlistCollectionId").append('<li class="list-group-item"><div class="row justify-content-between"><div class="col-auto">' + user.name + '</div><div class="col-auto"><a class="btn btn-sm btn-success" href="'+ addUserBaseUrl +'?userId='+user.id+'">Wybierz</a></div></div></li>');
                    }
                }
            }
    });
</script>
 }

上述修改中@Url.Action会在服务器端自动生成符合你项目路由规则、携带固定groupId参数的基础地址,后续只需要在JS中把动态的user.id拼接到URL参数中,生成的a标签就有完整可访问的链接,点击后即可正常请求对应的控制器方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:27:05