2012-12-11 27 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; 
} 

再次,请注意星号。你并没有调用正确的空白,实际上你可能会调用一个甚至不存在的空白。