如何将<a>标签的value属性作为参数传入Controller Action
解决动态更新链接Path参数的问题
你遇到的核心问题在于:服务器端生成的href是页面渲染时就固定的静态字符串,单纯修改value属性并不会自动同步到链接的参数里——因为@Url.Action是ASP.NET在后端执行的代码,页面发送到浏览器后,这个URL就和value属性没有任何关联了。
下面是具体的解决步骤:
1. 调整HTML链接的基础结构
先把硬编码的path参数从@Url.Action中移除,只保留控制器和方法的基础路径(如果value属性没有其他用途,也可以直接删掉):
<a id="modalRelease" class="btn btn-primary" target="_blank" href="@Url.Action("GoToReleaseNotes", "CoreTRac")">Release Note</a>
2. 用JavaScript动态更新URL参数
拿到releaseNote的值后,我们需要直接修改链接的href属性,将path参数动态拼接进去。推荐使用原生URL对象处理,能自动解决URL编码和参数拼接的问题:
var releaseNote = e.relatedTarget.dataset.param3; // 获取链接元素 var releaseLink = document.getElementById("modalRelease"); // 解析现有链接为URL对象 var url = new URL(releaseLink.href); // 设置path参数的值 url.searchParams.set("path", releaseNote); // 更新链接的href属性 releaseLink.href = url.toString();
如果你更习惯使用jQuery,也可以这样实现(记得对参数编码,避免路径里的空格、反斜杠等特殊字符导致URL错误):
var releaseNote = e.relatedTarget.dataset.param3; var baseHref = $("#modalRelease").attr("href"); // 编码参数后拼接成新的URL var newHref = baseHref + "?path=" + encodeURIComponent(releaseNote); $("#modalRelease").attr("href", newHref);
补充说明
之前的方法无效,是因为@Url.Action生成的URL在页面加载后就是静态文本了,修改value属性只是改变了元素的一个自定义属性,不会自动映射到href的参数中。只有直接操作href属性,才能真正更新链接的跳转地址。
内容的提问来源于stack exchange,提问作者gnagesh
相关产品推荐
相关产品推荐

