2011-09-02 25 views
1

我設置DOM加載時控件的值。我有aspx頁面上的這個超級簡單的代碼:這是文本框和標籤的預期行爲嗎?

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#<%=textBox2.ClientID %>').val($('#<%=textBox1.ClientID %>').val()); 
      $('#<%=lblVal.ClientID %>').html($('#<%=textBox1.ClientID %>').val()); 

     }); 
    </script> 

     <asp:TextBox runat="server" ID="textBox1" Text="Test data" /> 
     <asp:TextBox runat="server" ID="textBox2" /> 
     <asp:Label runat="server" ID="lblVal" Text="Old Data" /> 
     <asp:Button runat="server" Text="Click Me" onclick="Unnamed1_Click" /> 

在我的按鈕單擊事件處理程序我有這樣的代碼:

protected void Unnamed1_Click(object sender, EventArgs e) 
    { 
     Debug.Write(textBox2.Text); 
     Debug.Write(lblVal.Text); 
    } 

說來讓我震驚lblVal有它的舊值事情。在javascript中設置值對標籤沒有任何影響,而textbox2的數據反映在服務器上。文本框和標籤的預期行爲是什麼?這讓我感到有點驚訝,因爲我以前從未遇到過這種東西。

+0

不,他們應該保留自己的價值;我用JS更改文本框和隱藏字段的值,並將其發回到服務器確定.... –

+0

@Brian:我不是在談論隱藏的領域。您可以更改標籤的值並試用。 – TCM

回答

2

該標籤將呈現爲HTML label標記,而不是表單字段。因此,它沒有提交表單時發佈的值,並且在回發中恢復的值來自ViewState。表單字段(例如,成爲input的ASP文本框)將發佈它們的值,並且這將覆蓋viewstate中的值。

你可以通過改變隱藏的輸入來更新javascript,然後在你的回發中更新標籤而不是更新內容。

+0

實際上,在我的公司,我正在使用一個付款系統,其中要收取的總金額存儲在標籤中。所以我只是在檢查我是否可以破解它,然後通過Firebug改變它的價值,但是對於我的意外,舊價值只能被收取:p。我無法破解這個系統。 – TCM

0

asp:Label控件呈現爲一個跨度,因此不是表單元素,其更改的內容不會發布到服務器。