2012-11-10 104 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'將會失敗,沒有它。 –