我的jQuery代码中有一个JavaScript变量,其中包含我需要在Html.ActionLink
中使用的ID,但它不起作用:
@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI", new {id = goalcard.Id},null))
我得到:'无法解析符号“goalcard”',原因是目标卡是一个JavaScript变量。
这就是它的样子:
$.post('@Url.Action("Search", "SearchNKI")', data, function (result) {
$("#GoalcardSearchResult tbody").empty();
result.forEach(function(goalcard) {
$("#GoalcardSearchResult tbody").append(
$('<tr/>', {
// steg Create a row for each result
html: "<td>" + goalcard.Name +
"</td><td>" + goalcard.Customer +
"</td><td>" + goalcard.PlannedDate +
"</td><td>" + goalcard.CompletedDate +
"</td><td>" + '@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI", new {id = goalcard.Id},null))' + "</td>"
}));
});
});
我现在一直在测试,我几乎找到了解决方案,它看起来像这样:
@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI",null, new {id = "mylink"}))
然后我做了一个新功能:
$('#mylink').click(function (goalcard) {
var id = goalcard.Id;
this.href = this.href + '/' + id;
});
这应该可行,但是我必须在forEach
循环内使用此单击函数才能达到goalcard变量。如果我把它放在forEach
里面,这个Click函数将被执行多次,具体取决于有多少个目标卡。
如果有两个守门员,结果将是/AnswerNKI/AnswerForm/1/2
。
或者如果有五个守门员,可能会/AnswerNKI/AnswerForm/1/2/3/4/5
。
但它应该是/AnswerNKI/AnswerForm/1
另一个问题是所有其他行都有/AnswerNKI/AnswerForm/
,所以只有第一行基本上得到了一个id。
我不知道如何找到解决问题的方法。
非常感谢任何形式的帮助。
提前致谢
答案 0 :(得分:2)
这不是您遇到的具体问题的解决方案。但看起来您正在使用jquery来更新页面的一部分。
如果是这样,您是否考虑过使用一个回调来返回由PartialView生成的html,并且只是在javascript回调中进行替换?这是我经常使用的模式。它允许您使用MVC引擎,组件和设计工具。
这是我做的一个例子:
$("form.unscoped_filter").live("submit", function () {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
error: function (a, b) {
debugger;
},
success: function (result) {
$("div#targetID").html(result);
bindExtenders();
}
});
return false;
});
此特定示例拦截来自特定类表单的回发,并将其传递到我的MVC应用程序处理它的网站。根据通常的MVC设计方法,在BeginForm块中设置目标方法和控制器。目标方法处理数据并返回一个PartialView,它将该数据转换为html,然后将其发送到jquery块中的成功回调。它用于替换目标div中的html。虽然有更多的部分在运行(例如,javascript,MVC方法,PartialView),但是通过这种方式分离事物可以让每个部分发挥其独特的优势:jquery非常适合操作DOM,MVC方法非常适合操作/处理对html的请求,以及PartialViews是一个很好的工具来布局和生成html。
一旦掌握了它,这是一种非常灵活和强大的方法。特别是,您可以使用html5技术将参数从ActionLink传递到jquery块。例如,您可以将“data-someParamName = ...”添加到ActionLink调用的html属性中,然后在javascript块中提取参数值,执行以下操作:
var pagerCode = $(this).attr("data-someParamName");
实际上,这就是我如何控制在成功回调函数中更新哪个特定div。
同样,这并没有回答你的具体问题,而是提出了一种不同的方法来解决我认为你想要做的事情。祝你好运!