2012-11-10 72 views
0

我有AJAX请求,看起来像这样:添加JavaScript变量ActionLink的

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>'); 
     } 
)}; 

编辑!我正在试图将此动作链接附加到“成功”的div上。我不知何故在我的第一篇文章中忘记了$(“#myDiv”)。append()代码。

new {id = data.id }部分,我想在这个actionlink中使用data.id(一个javascript变量)。

我不断收到错误,或者说数据没有定义,或文字等字符过多..

有没有人成功地这样做过?

回答

1

你不能直接这样做,因为代码的一部分是在服务器(Url.Action部分)运行和data.id只可获得一次代码河段客户端浏览器..

但是你可以做的一招,它像设置从服务器id有一个虚拟的独特价值,并与JavaScript的更换..

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

先生,我认为你的服务器端(<%)标签和cliend侧执行上下文之间的混淆。 "data"是在客户端定义的变量,服务器端标记之间的所有内容都将在服务器上处理。您的页面中没有变量,名称为"data"!因为您想在服务器中使用它,并且它位于服务器端(<%%>)标签之间。

在客户端脚本将类似于下面的代码:

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>' 
     } 
)}; 

请与开发工具文件内容(或任何其他的东西),你会看到什么是在客户端实际发生的事情。

UPDATE

一次!你不能像我已经提到的那样做这样的事情。服务器端代码和客户端代码有区别。不管您想如何访问名为"data"的变量。它没有在服务器端代码中定义。它是将在客户端执行上下文中执行的成功函数的参数。

希望它可以帮助 干杯

+1

此外倾销span标记的更迭功能并不做任何事情eitehr – mplungjan

+0

@mplungjan谢谢你提的。是的,绝对正确。 – Rikki

+0

对不起,再看看帖子。我试图将actionresult链接附加到成功的div上。 我的错。第一篇文章省略了附加代码。 – Jeff

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

是的,这应该工作。 – mipe34

+0

'id'可能是一个必需的路由参数,如果是这样的话'Url.Action'将会失败,没有它。 –