我有下面的代码在Jquery函数
$.each(array, function (index, value) {
var id1 = value.match(/d+/);
$("#linksList").append("<li>" + value + "<a href='@Url.ActionLink("Details", "Jira", new { id ="${id1}" })'>" + value + "</a>" + "</li>");
});
但是我不能传递参数Id。我得到的随机值分配为Id如下。我做错了什么?
<a href="/Jira/Details/%2Bid1%2B"> jira_subtask_link 41102</a>
这是不可能混合的,因为Razor存在于服务器端而jquery是客户端
模板引擎将c#代码注入HTML/CSS/Js中,然后再运行。因此,当它准备编译为客户端源代码时,asp.net无法呈现这样的变量,因为当应用程序运行时,var的生命周期是客户端/。这是编译时和运行时的差异
我想你可能会更好
- 将javascript变量保存为可以发送回控制器的内容
- 在控制器级别,将其放入可以传递给视图的模型
- 显示带有该id的动作链接,作为来自视图模型的变量,而不是来自jQuery
我知道这听起来有点奇怪,但这就是服务器端和客户端代码在模板引擎中的交互方式
另外,一种不太高明的方法可能是插入一个"假人";id字符串,然后使用jQuery用实际的id值
替换虚拟文本。razor代码在服务器端编译并转换为html,客户端无法理解razor语法,所以如果你想从客户端获得相同的结果,你必须使用javascipt
我就是这么做的
$("#linksList").append("<li>" + "" + "<a href='/JIra/Details/" + id + "'>" + value + "</a>" + "</li>");