将javascript变量添加到actionlink

时间:2012-11-10 17:22:41

标签: javascript asp.net-mvc asp.net-mvc-3

我的AJAX请求如下所示:

jsonData = JSON.stringify({stuff: stuff});
        $.ajax({
            url: '<%=Url.Action("myMethod", "myController") %>',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: jsonData,
            success: function (data) {
            $("#myDiv").append('<span><%=Html.ActionLink("Details", "myMethod", new {id      = data.id })%></span>');
         }
)};

修改!我试图将这个Actionlink附加到“成功”的div上。我在最初的帖子中忘记了$(“#myDiv”)。append()代码。

new {id = data.id }部分,我想在此动作链接中使用data.id(一个javascript变量)。

我不断收到错误,说明数据未定义,或文字中的字符数太多等。

之前有没有人成功完成这项工作?

3 个答案:

答案 0 :(得分:2)

先生,我认为你在服务器端(&lt;%)标签和cliend side执行上下文之间感到困惑。 "data"是在客户端定义的变量,这些服务器端标记之间的所有内容都将在服务器上处理。您的页面中没有名为"data"的变量!因为你想在服务器中使用它,它在服务器端(&lt; %%&gt;)标签之间。

在客户端中,您的脚本将类似于以下代码:

jsonData = JSON.stringify({stuff: stuff});
        $.ajax({
            url: 'THE_PROCESSED_RESULT_OF_SERVER_TAG_GOES_HERE',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: jsonData,
            success: function (data) {
    '<span>THE_PROCESSED_RESULT_OF_SERVER_TAG_GOES_HERE</span>'
         }
)};

使用开发人员工具(或任何其他内容)检查文件内容,您将看到客户端实际发生的情况。

<强>更新

再次!你不能做我已经提到过的事情。服务器端代码和客户端代码之间存在差异。无论您希望如何访问名为"data"的变量。它没有在服务器端代码中定义。它是将在客户端执行上下文中执行的成功函数的参数。

希望它有所帮助 干杯

答案 1 :(得分:2)

'<span><a href="<%=Url.Action("Details", "myMethod")%>?id=' + data.id + '"></a></span>'

答案 2 :(得分:1)

您无法直接执行此操作,因为代码的一部分在服务器上运行( Url.Action部分),data.id仅在代码到达时可用客户端浏览器..

但你可以做一个技巧,比如将id从服务器设置为具有虚拟唯一值,并将其替换为javascript ..

$("#myDiv")
   .append('<span><%=Html.ActionLink("Details", "myMethod", new {id = "-dummy-"})%></span>'.replace('-dummy-',data.id));