我的 C# 按钮在单击时没有执行任何操作?

问题描述 投票:0回答:1

我有一个我正在创建的 ASP.NET WebForms 网站的场所表。在表格每一行的末尾,我放置了一个标记为“书”的按钮。当我点击按钮时,它应该将我带到场地自己网站上的页面。

但是,当我尝试单击该按钮时,什么也没有发生。我尝试在 _click 方法的第一行放置一个断点,但它似乎没有到达那里。

这是按钮的代码。目前它只是为了打开弹出窗口(这不是完整的代码,只是相关部分):

Button btnbook = new Button
{
    ID = "Remove_" + VenuesTable.Rows.Count,
    Text = "Book",
    CommandArgument = reader["venueid"].ToString()
};
btnbook.Click += new EventHandler(btnbook_click);
joinCell.Controls.Add(btnbook);
socrow.Cells.Add(joinCell);

protected void btnbook_click(object sender, EventArgs e)
{
    Button button = (Button)sender; // This is where I put the brake point
    int venueid = int.Parse(button.CommandArgument);
    string buttonId = button.ID;
    ScriptManager.RegisterStartupScript(this, this.GetType(), "btnbook", "$('#bookingpopup').modal('show');", true);
}

我原以为单击按钮时会打开一个弹出窗口,但是代码甚至没有进入 _click 方法。没有错误消息,代码也没有损坏。

我该如何解决这个问题?

c# html asp.net webforms
1个回答
0
投票

这与 ASP.Net 页面生命周期有关。

要理解的关键是 ASP.Net 不会在请求或用户事件之间保留页面类的实例。当用户首次初始加载页面时,一旦初始渲染准备就绪,服务器就会丢弃用于创建它的页面类实例。

当用户单击该按钮时,就会向您的 Web 服务器发送一个全新的 HTTP 请求。 Web 服务器像处理任何其他请求一样处理此请求:使用页面类的“全新实例”。先前实例中渲染按钮的任何工作都已完成并已被丢弃。 这意味着创建动态控件的页面的任何代码都必须在

每次回发

上运行。为了使事件处理正常工作,这必须在 Page_Load 事件之前发生。

但是对于这个特定的按钮,我的建议是

根本不要使用服务器单击事件
。完全用 JavaScript 处理。当页面已经拥有处理点击所需的一切时,为什么要使用网络服务器上的资源来重新创建整个页面?

© www.soinside.com 2019 - 2024. All rights reserved.