在asp.net中,如何在按钮onClick事件中获取当前文本框的文本值?

7

我有这样的一个页面

<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函数,它将一个值赋给名为TextBox Name的文本框。
protected void Page_Load(object sender, EventArgs e)
{
    Name.Text = "Enter Your Name Here";
}

当点击AddNewName按钮后,我会在标签NewName中写入它。

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

但是,无论我在名称文本框中输入什么内容,标签只显示“在此输入您的姓名”。它从未更新为名称文本框中的实际内容。我的代码有什么问题?

3个回答

17

问题在于您总是在Page_Load中覆盖了已更改的值。 相反,请检查IsPostBack属性:

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

3

每次在Page_Load事件中重新将文本分配给Name,这会覆盖在到达AddNewDivision_Click事件之前在TextBox中输入的文本。为了只在页面加载时分配一次,并且不覆盖后续调用,您可以使用Page.IsPostBack属性。

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

您可以在设计HTML中分配文本并从page_load删除声明

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

我希望我能选择你们两个的答案。但是Tim的回答是第一个解决了这个问题。抱歉Adil。但我也为你的回答投了赞成票。 - Jin Wang
非常感谢您@TheJinStudio。这很完美,谢谢关心。 - Adil

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;
}

再次注意星号。你没有调用正确的void函数,事实上,你可能在调用一个不存在的void函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接