2009-11-03 20 views
1

我有JavaScript代碼,如下所示:如何變量添加到服務器端綁定

$('#lnkPopup').click(function() 
{ 
    var id = $(this).attr('rel'); 

    var msgCount = '<%= Model.ElementAt('+id+').MailCount %>'; 
}); 

<%= Model.ElementAt( '+ ID +')MailCount%>不起作用。

那麼我如何添加一個JavaScript變量到服務器端查詢呢?

回答

2

有兩種可能的方式來回答這個問題。

1)簡短的回答是你不能做你嘗試什麼。

首先要明白的是,<%%>服務器標籤之間的代碼只有服務器端代碼。

標籤...

<%= 

...意味着服務器將生成的輸出,並將結果發送給客戶端。

Javascript & jQuery代碼只是客戶端代碼。

所以你的javascript/jQuery不能直接與服務器端代碼交互。但是,您可以從服務器端生成客戶端代碼。


2)我們如何從客戶端代碼獲取值到服務器端?

有幾個方法可供選擇,這將取決於你所選擇的Web應用程序的風格,手頭的問題。

  • 發佈或獲取到一個URL - 這可能是 使用AJAX執行。
  • 生成JavaScript/jQuery代碼 你需要在服務器上,這樣你就不會 需要「回發」。
+0

這就是我的想法。當數據已經存在於我的視圖模型中時,發出ajax請求似乎是一種浪費。有另一種方式。 – CurlyFro 2009-11-03 17:45:13

0

基本上,你沒有。服務器代碼將在服務器上執行,很久之後JavaScript就會在客戶端上執行。

爲了讓服務器端代碼知道javascript值,您必須創建一個ajax回調服務器。

或者,您可以使用服務器端代碼編寫一個包含元素和郵件數的JavaScript哈希表。該函數可以在執行後查找該哈希表中的值。

有很多方法可以解決這個問題,理解的關鍵概念是當JavaScript執行時,服務器代碼已經完成,所以你最好把所有的數據放在頁面上,或者用ajax回調服務器。

2
var mailCountTable = {}; 
<% foreach (var id in Model.Ids) { %> 
    elementTable['<%= id $>'] = '<%= Model.ElementAt(id).MailCount %>'; 
<% } %> 

$('#lnkPopup').click(function() 
{ 
    var id = $(this).attr('rel'); 
    var msgCount = mailCountTable[id]; 
}); 

另外,您可以使用$ .getJSON讓你mailCountTable。或者,加載延遲:

function getMailCount(id) { 
    if (mailCountTable.length == 0) 
     $.ajax({async: false, url: '/mailcounttable', format: 'json', 
      success: function(data) { mailCountTable = data; } }); 
    return mailCountTable[id]; 
} 
+0

我最終做了這樣的事情。 – CurlyFro 2009-11-03 18:40:09

相關問題