为什么是我的asp.net按钮.文本值不适合按钮时的值.调用Click函数

本文关键字:按钮 调用 函数 Click 不适合 文本 我的 asp net 为什么 | 更新日期: 2023-09-27 18:14:31

我有这个asp.net按钮,我以编程方式放置在一个asp.net表的标题行。当单击该按钮时,该按钮调用一个函数,该函数隐藏或显示表的行(而不是头行)。

    private void Hide_or_Show(object sender, EventArgs e)
{
    System.Web.UI.WebControls.Button button = sender as System.Web.UI.WebControls.Button;
    Table table = (Table)button.Parent.Parent.Parent;

    if (button.Text == "Hide")
    {
        for (int i = 1; i < table.Rows.Count; i++)
        {
            table.Rows[i].Visible = false;
        }
        button.Text = "Show";
    }
    else
    {
        for (int i = 1; i < table.Rows.Count; i++)
        {
            table.Rows[i].Visible = true;
        }
        button.Text = "Hide";
    }
}

当我第一次调用函数来隐藏表时,一切似乎都工作得很好。但是,当我点击显示表格的按钮时,即使在我的浏览器中,按钮显示"显示",当程序进入功能时,按钮。text = "Hide"。似乎文本在客户端发生了变化,但在服务器端却没有。因此,它永远不会得到函数的'else'部分。

为什么是我的asp.net按钮.文本值不适合按钮时的值.调用Click函数

添加这个作为答案(来自上面的评论)来帮助未来的访问者…

如果你在Page_Load中设置文本,那么它将覆盖你想要完成的内容。请记住,Page_Load(以及其他)在每个请求上都被调用,而不仅仅是初始请求。它在处理程序之前被称为。因此,通过在Page_Load中设置.Text属性,您的事件顺序变为:

  • 初始页面加载,在Page_Load
  • 中设置文本为"Show"
  • 点击显示按钮,在Page_Load
  • 中设置文字为"显示"处理点击事件,在Hide_or_Show 设置文本为"隐藏"
  • 点击隐藏按钮,在Page_Load
  • 设置文本为"显示"处理点击事件…文本现在是"显示"(你看到的错误条件)

在这种情况下,快速而肮脏的解决方案是将Page_Load逻辑的那一部分包装在条件中,因此它只在初始加载时发生:

if (!IsPostBack)
    button.Text = "Show";

为什么使用按钮的文本?为什么不直接使用

private void Hide_or_Show(object sender, EventArgs e)
{
Table table = (Table)button.Parent.Parent.Parent;
for (int i = 1; i < table.Rows.Count; i++)
    {
        table.Rows[i].Visible = !table.Rows[i].Visible;
    }
}