2012-12-11 76 views
7

我有這樣一個頁面獲取按鈕onClick事件當前文本框的文本值 - asp.net

<form runat="server" id="NewForm"> 
    Name: <asp:TextBox ID="Name" runat="server"></asp:TextBox> 
    <asp:Button ID="AddNewName" runat="server" Text="Add" OnClick="AddNewName_Click" /> 
    <asp:Label ID="NewName" runat="server"></asp:Label> 
</form> 

在後面的代碼,我有分配一個值到文本框名稱的Page_Load中。

protected void Page_Load(object sender, EventArgs e) 
{ 
    Name.Text = "Enter Your Name Here"; 
} 

然後坐在單擊按鈕AddNewName,我將它在標籤寫新名稱

protected void AddNewDivision_Click(object sender, EventArgs e) 
{ 
    NewName.Text = Name.Text; 
} 

但是,不管我在名稱的文本框輸入,標籤只顯示「輸入您的在這裏命名「。它永遠不會更新到名稱文本框中的實際內容。我在做什麼錯誤的代碼?

回答

16

問題是您總是覆蓋Page_Load中更改的值。相反,檢查IsPostBack屬性:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
     Name.Text = "Enter Your Name Here"; 
} 
+1

Awesone !!!!!這正是解決我的問題。非常感謝Tim。 –

2

您是re-assigning來命名每一次Page_Load,超過寫入您在文本框中輸入文本之前到達AddNewDivision_Click事件的文本。要在頁面加載時分配一次,並且不要重寫後續調用,您可以使用Page.IsPostBack屬性。

if(!Page.IsPostBack) 
     Name.Text = "Enter Your Name Here"; 

或者你可以指定設計的H​​TML文本和removestatementpage_load

<asp:TextBox ID="Name" runat="server" Text="Enter Your Name Here"></asp:TextBox> 
+0

謝謝你的回答Adil! –

+0

不客氣。 – Adil

+0

我希望我可以選擇你的答案。但蒂姆是第一個答案,他的答案解決了這個問題。對不起。但我也投票贊成你的。 –

0

另一個顯而易見的問題是:

<form runat="server" id="NewForm"> 
    Name: <asp:TextBox ID="Name" runat="server"></asp:TextBox> 
    <asp:Button ID="AddNewName" runat="server" Text="Add" **OnClick="AddNewName_Click"** /> 
    <asp:Label ID="NewName" runat="server"></asp:Label> 
</form> 

上面沒有星號。然後,你想知道爲什麼這沒有運行:

protected void **AddNewDivision_Click**(object sender, EventArgs e) 
{ 
    NewName.Text = Name.Text; 
} 

再次,請注意星號。你並沒有調用正確的空白,實際上你可能會調用一個甚至不存在的空白。