我写这段代码是为了从转发器删除,但我有一个问题。 当我运行我的页面广告删除其中一行时,此行被删除,当我刷新该页面时,另外一行被删除,我不想删除那个。实际上我想删除一行但是当我刷新时删除两行页
protected void SendBoxrep_ItemCommand(object source, RepeaterCommandEventArgs e)
{
MembershipUser Admin = Membership.GetUser(User.Identity.Name);
if (e.CommandName == "del")
{
Guid g = new Guid(e.CommandArgument.ToString());
MessageClass.deleteMessage(g);
SendBoxrep.DataSource = MessageClass.selectMessagesUser(Admin);
SendBoxrep.DataBind();
}
}
public static void deleteMessage(Guid id)
{
foreach (Message item in MessageClass.LoadAll(id))
{
MDB.Messages.DeleteOnSubmit(item);
MDB.SubmitChanges();
}
}
答案 0 :(得分:1)
在这样的场景中,我已成功使用Response.Redirect重新加载页面并在处理回发事件后删除回发信息。这样回发只会发生一次,使用浏览器刷新页面不会导致任何问题。而不是调用Repeater.DataBind ...
Response.Redirect(Request.RawUrl);
您可能必须对页面的其他部分进行设计更改,或者在查询字符串中添加一个参数,表明您正在重新加载页面,但这是提供此功能的税收。
答案 1 :(得分:0)
上面的评论显示您通过F5刷新页面;众所周知,这会导致ASP.NET页面出现问题,因为它们的回发方式,以及它们的生命周期是如何工作的。我建议改为在页面上创建一个Refresh按钮,它会进行回发并更新Repeater绑定的必要信息。
答案 2 :(得分:0)
尝试根据表格的主键删除。
假设您删除一个表格,其中包含messageID作为主键的消息。 现在,如果您想删除特定消息,则将messageID作为commandArgument发送并删除它。
刷新页面后删除时会发生同样的事件,即如果按行中的删除按钮删除事件 SendBoxrep_ItemCommand 已触发并取消命令,则会删除该记录。再次按F5刷新页面,然后触发上一个删除事件。所以你的两条记录正在被删除。
现在使用主键(messageID),即使按F5两次触发同一事件,它也只会删除一条记录。