2009-09-23 54 views
1

比方說,我有如何訪問JS變量在C#

<div id="blah">500</div> 

(背景:asp.net aspx頁面) 如何讓一個C#代碼訪問價值?

<% 
    int numberiwant = ###; // Ideally 500 
%> 

我在想沿jQuery的東西線:

<script type="text/javascript"> 
var value = $('#blah').html(); 
// Then do some magic and pass to c#? 
</script> 

有沒有更好的辦法?

+0

更新:問題是blah div內的內容是使用AJAX填充的,所以我沒有對內容進行預先頁面人口控制。 – Rio 2009-09-23 13:04:58

+0

在這種情況下,您還需要AJAX將這些內容發送到服務器。 – Digitalex 2009-09-23 13:07:00

+0

問題是如何? – Rio 2009-09-23 13:16:05

回答

4

使用隱藏的輸入框

<input id="hiddenControl" type="hidden" runat="server" /> 

把你的價值在輸入框中使用javascript

//call this method before you postback, maybe on form submit 
function SetPostbackValues() { 
    var hiddenControl = '<%= hiddenControl.ClientID %>'; 
    document.getElementById(hiddenControl).value = 500; 
    //or some other code to get your value 
} 

訪問與在服務器端

protected void btnSubmit_Click(object sender, EventArgs e) { 
    var hiddenValue = hiddenControl.Value; 
} 
+0

聰明。我喜歡。 – 2009-09-24 15:17:31

0

阿賈克斯,搜索它,瞭解它,找到一個好的圖書館,並開始實施

0

服務器端永遠不會有客戶端的變量(JavaScript)的直接訪問。您必須以某種方式將它們發送到服務器,無論是通過查詢或發佈,還是通過AJAX。

2

您可以使用服務器端div來代替,例如:

<asp:Panel ID="blah" runat="server">500</asp:Panel> 

然後你就可以訪問它和它的內容的服務器端。

或者;

<div id="blah"><asp:Literal ID="blahContent" runat="server" Text="500" /></div> 

更新:在問題澄清之後,顯然這不起作用。唯一的解決方案就是使用javascript來獲取值,然後使用AJAX將其發送到服務器。

+0

您也可以直接將runat =「server」添加到div。 – 2009-09-23 12:59:00

+0

在生成頁面時,我無法控制div的內容。 – Rio 2009-09-23 13:05:33

1

輸入框中的值生成HTML時,服務器上將運行<% .. %>中的C#代碼。當值通過AJAX更新時,它全部發生在客戶端 - 在C#完成運行後很久。