我为一个项目创建了一个网站,您可以注册该网站。它已连接到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);
}
}
我已经尝试修复了几个小时,但无济于事。 有人知道我做错了吗?
编辑
我想提到的是,我使用了inspect元素来确保正确设置了按钮ID。这是关于触发不起作用的事件的。
答案 0 :(得分:0)
1-禁止用户不等于从数据库中删除该用户,因此请考虑您将来可能要撤消操作。 2-您正在使用字符串数据类型作为id。 id始终是数字。 3-通过Javascript或JQuery触发事件要容易得多。你为什么不使用它们? 4-在查询中设置条件
WHERE Username = '{buttonid}'
您将用户名等于id,不应该
WHERE Id = '{buttonid}'
?