3

我的 jQuery 代码中有一个 JavaScript 变量,其中包含我需要在其中使用的 ID,Html.ActionLink但它不起作用:

@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI", new {id = goalcard.Id},null))

我得到:'无法解析符号“目标卡”',原因是目标卡是一个 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循环内使用这个点击函数才能到达目标卡变量。如果我把它放在里面forEach,这个 Click 函数将被执行多次,具体取决于有多少个球门卡。

所以结果是 /AnswerNKI/AnswerForm/1/2如果有两张球门卡。或者/AnswerNKI/AnswerForm/1/2/3/4/5如果有五张球门卡。

但应该是/AnswerNKI/AnswerForm/1

它基本上加起来了。

另一个问题是所有其他行都有 /AnswerNKI/AnswerForm/所以只有第一行基本上有一个 id。

我不知道如何找到解决该问题的解决方案。

非常感谢任何形式的帮助。

提前致谢

4

1 回答 1

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 的方式。

同样,这并没有回答您的具体问题,而是提出了一种不同的方式来解决我认为您正在尝试做的事情。祝你好运!

于 2012-05-08T14:19:57.037 回答