【问题标题】:Events wont fire on button click事件不会在按钮单击时触发
【发布时间】:2020-02-20 08:14:52
【问题描述】:

我为一个项目创建了一个网站,您可以注册该网站。它与 SQL 数据库挂钩。

我正在尝试创建一个页面,管理员可以在其中查看有关不同现有用户的信息,以及删除其中一些用户。

问题是,禁令系统是这样工作的: 所有用户都有一个单独的禁止按钮,其 ID 是用户名的 ID,然后,如果管理员想要禁止用户,他单击用户名旁边的禁止按钮,然后触发一个事件,并且该按钮的 ID单击的用户(正如我所说,等于用户名)会随查询一起发送,并且每个具有该用户名的用户都会被删除。

当我单击由后面的代码生成的按钮之一时,该事件不会触发,但如果我在 HTML aspx 页面中设置一个具有完全相同属性的按钮,它会完美运行。

这是我的代码:

{
    public DbConnector Dbconnector = new DbConnector();

    public string htmllist = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["user"] == null) Server.Transfer("logincode.aspx");
        if (Session["admin"] == null)
        {
            Server.Transfer("HomePage.aspx");
        }
        else
        {
            DbConnector dbc = new DbConnector();
            SqlDataReader reader = dbc.read("SELECT * FROM UsersTable ORDER BY id");
            while (reader.Read())
            {
                htmllist += $"<tr><td class=\"id\">{reader["Id"].ToString()}</td>";
                htmllist += $"<td>{reader["Username"].ToString()}</td>";
                htmllist += $"<td>{reader["Password"].ToString()}</td>";
                htmllist += $"<td class = \"mail\">{reader["Email"].ToString()}</td>";
                htmllist += $"<td>{reader["IsAdmin"].ToString()}</td>";
                htmllist += $"<td><asp:Button runat=\"server\" name=\"{reader["Username"].ToString()}\" id=\"{reader["Username"].ToString()}\" class=\"btn\" value=\"Remove User\" OnClick=\"BanUser\"/></td></tr>";
                htmllist += "<br />";
            }
            dbc.closeconnection();
        }
    }
    protected void BanUser(object sender, EventArgs e)
    {
        Button button = (Button)sender;
        string buttonid = button.ID;
        string banquery = $"DELETE FROM UsersTable WHERE Username = '{buttonid}';";
        new DbConnector().ExecuteCRUDQuery(banquery);
    }
}

我已经尝试解决这个问题几个小时,但无济于事。 有谁知道我做错了什么?

编辑

我想提一下,我使用了检查元素来确保按钮 ID 设置正确并且它们是正确的。这是关于触发不起作用的事件。

【问题讨论】:

  • 如果你想以表格结构显示数据,最好使用gridview。这还将支持显示控件,例如每行上的按钮并为所有这些触发公共事件。它们以您创建按钮的方式,它们实际上并未创建为按钮控件并添加到页面控件集合中。这肯定行不通
  • 这不是触发事件。您正在尝试动态呈现 ASP 按钮,但您不能以将其作为字符串执行的方式来执行此操作。你如何渲染字符串htmllist?您需要在代码(不是字符串)中创建一个按钮并将其添加到页面中。你需要一个容器(例如占位符)来添加你的按钮,这样你就可以控制它在页面上的添加位置。否则,您可以根据需要将其直接添加到页面中。

标签: c# sql asp.net database


【解决方案1】:

1-禁止用户不等于从数据库中删除该用户,因此请考虑您将来可能要撤消。 2-您正在为 id 使用字符串数据类型。 Id 始终为数字。 3-通过 Javascript 或 JQuery 触发事件要容易得多。你为什么不使用它们? 4-在您的查询中,您正在设置条件

WHERE Username = '{buttonid}'

您将 username 等同于 id ,不应该是

WHERE Id = '{buttonid}'

?

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 2016-04-25
    • 2012-09-12
    • 2019-06-22
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多