在ASP.net中删除RepeaterControl中的行

时间:2009-10-14 09:18:04

标签: asp.net datarepeater

我写这段代码是为了从转发器删除,但我有一个问题。 当我运行我的页面广告删除其中一行时,此行被删除,当我刷新该页面时,另外一行被删除,我不想删除那个。实际上我想删除一行但是当我刷新时删除两行页

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

3 个答案:

答案 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两次触发同一事件,它也只会删除一条记录。