2015-05-08 67 views
1

改變之後的標籤我有這個JavaScript函數:無法從ASP獲得Text屬性:使用JavaScript

<script type="text/javascript"> 
    function DisplayTime() { 
     var d = new Date(); 
     document.getElementById('<%=Label1.ClientID %>').innerHTML = d.localeFormat("yyyy-mm-dd HH:mm:ss"); 
    } 
</script> 

我有這樣的標籤:

<asp:Label ID="Label1" runat="server" Text ="labelText" ></asp:Label> 

在代碼隱藏我這樣做:

Page.ClientScript.RegisterStartupScript(GetType(), "DisplayTime", "DisplayTime();", true); 
string text = Label1.Text; 

的DisplayTime()函數工作正常。

我運行瀏覽器時顯示的Label1文本是: 2015-21-08 17:21:36 < - 這很好。

但是,當我嘗試讀取從代碼隱藏的Label1文本屬性我得到的原始文本值: 「LabelText的」

有誰有一個想法,爲什麼?

問候 rubenc

+2

asp的標籤標籤使用所謂的文本來構建一個HTML標籤標記的innerHTML屬性。 Javascript正在設置由asp創建的html標籤元素的innerHTML,但沒有直接訪問asp對象。您的CodeBehind從asp標籤獲取屬性Text。 (服務器端客戶端邏輯分離) – user2782001

+0

您應該使用隱藏的控件而不是標籤,是user2782001忘記說的內容。另外http://stackoverflow.com/questions/274826/how-to-get-client-date-and-time-in-asp-net – misha130

+0

感謝所有您的回覆 – ruben

回答

1

有誰有一個想法,爲什麼?

簡答

string text = Label1.Text;語句運行在服務器端。 DisplayTime()函數在客戶端運行。由於服務器端代碼之前運行的客戶端代碼呢,服務器不知道什麼樣的變化DisplayTime()將會使。您需要將更改發送回服務器。

另外說明

在ASP.NET網頁,服務器側(服務器)和客戶端(客戶端)通過HTTP通信。客戶端通常是一個Web瀏覽器。

  1. 客戶端發送到服務器的請求。
  2. 在響應,服務器goes through the page life cycle上ASP.NET代碼來生成一個HTML頁面。
  3. 服務器通過HTTP發送該頁面返回給客戶端。
  4. 客戶端呈現HTML和任選的JavaScript改變它。

當您的代碼調用RegisterStartupScript時,HTML頁仍在服務器上(步驟2)。重要的是,客戶尚未調用DislayTime()功能呢!

當您的代碼調用string text = Label1.Text;時,HTML頁面仍在服務器端。同樣,客戶端尚未調用DisplayTime()函數。結果:Label1將具有其原始值。

// DisplayTime() only goes live once it reaches the client. 
Page.ClientScript.RegisterStartupScript(
    GetType(), "DisplayTime", "DisplayTime();", true); 

// The client-side hasn't called `DisplayTime()` yet. 
string text = Label1.Text; 

可能的選項

如果我們想在服務器端要意識到的JavaScript操作(或任何其他客戶端的變化),那麼就必須使用HTTP來這些更改發送回服務器。這可以是一個POST或另一個HTTP動詞。您可以回發整個頁面,也可以使用AJAX。這可能超出了這個答案的範圍。

+1

感謝您的解釋 – ruben

+0

@ruben你是歡迎。我很高興解釋它爲什麼會發生。 –

0

我發現這裏的解決方案: Retrieve Client's Today's Date using ASP.NET

+0

很酷。在你的鏈接中,有一點是JavaScript所說的:'//重新加載頁面,以便服務器獲取cookie值並計算客戶端的時間。這當然是將更改發送回服務器的原因。 –