0

我编写此代码用于从转发器中删除,但我有一个问题。当我运行我的页面广告删除其中一行时,该行被删除,当我刷新该页面时,另一行被删除,我不想删除它。事实上,我想删除一行,但刷新时删除两行页

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();
    }
}
4

3 回答 3

1

在这样的场景中,我已经成功地使用 Response.Redirect 重新加载页面并在处理回发事件后摆脱回发信息。这样回发只会发生一次,并且使用浏览器刷新页面不会导致任何问题。而不是调用Repeater.DataBind ...

Response.Redirect(Request.RawUrl);

您可能必须对页面的其他部分进行设计更改,或者在查询字符串中添加一个参数,指示您正在重新加载页面,但这是提供此功能的代价。

于 2009-10-20T02:56:42.160 回答
0

上面的评论表明您正在通过 F5 刷新页面;众所周知,这会导致 ASP.NET 页面出现问题,因为它们是如何回发的,以及它们的生命周期是如何工作的。我建议改为在页面本身上创建一个刷新按钮,该按钮执行回发并更新中继器绑定到的必要信息。

于 2009-10-19T11:17:38.557 回答
0

尝试根据您删除的表的主键进行删除。

假设你删除了一个表,说 Messages 以 messageID 作为主键。现在,如果您想删除特定消息,则将 messageID 作为 commandArgument 发送并删除。

在刷新页面时删除后,会发生相同的事件,即如果您连续按下删除按钮以删除消息,则触发事件SendBoxrep_ItemCommand并使用 commandArgument 删除记录。再次按 F5 刷新页面,然后触发前一个删除事件。所以你的两条记录被删除了。

现在使用主键(messageID),即使按 F5 两次触发相同的事件,它也只会删除一条记录。

于 2009-10-20T11:50:41.237 回答