为什么是我的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'部分。
添加这个作为答案(来自上面的评论)来帮助未来的访问者…
如果你在Page_Load
中设置文本,那么它将覆盖你想要完成的内容。请记住,Page_Load
(以及其他)在每个请求上都被调用,而不仅仅是初始请求。它在处理程序之前被称为。因此,通过在Page_Load
中设置.Text
属性,您的事件顺序变为:
- 初始页面加载,在
Page_Load
中设置文本为"Show" - 点击显示按钮,在
Page_Load
中设置文字为"显示"处理点击事件,在 - 点击隐藏按钮,在
Page_Load
设置文本为"显示"处理点击事件…文本现在是"显示"(你看到的错误条件)
Hide_or_Show
设置文本为"隐藏"在这种情况下,快速而肮脏的解决方案是将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;
}
}