Pergunta

Escrevo este código para excluir do repetidor, mas tenho um problema. Quando eu executo meu anúncio de página Excluir uma das linhas, esta linha é excluída e, quando eu refresco a página, outra linhas excluiu que não quero excluir isso. No fato, quero excluir uma linha, mas excluir duas fileiras quando refresco página

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();
    }
}
Foi útil?

Solução

Tente excluir com base na chave primária da tabela UR Excluindo.

Suponha que você exclua uma tabela, diga mensagens que têm MessageId como chave primária. Agora, se você quiser excluir uma mensagem específica, envie o MessageId como CommandAgument e exclua isso.

Depois de excluir quando você estiver atualizando a página, o mesmo evento ocorre, ou seja, se você pressionar um botão de exclusão em uma linha para excluir a mensagem do evento SendBoxrep_itemCommand disparou e tomando o Comandogument, ele exclui o registro. Novamente, você pressiona F5 para atualizar a página e o evento anterior para Delete é demitido. Então, seus dois registros estão sendo excluídos.

Agora usando a chave primária (MessageId) Ele excluirá apenas um registro, mesmo se você disparar o mesmo evento duas vezes pressionando F5.

Outras dicas

Em um cenário como esse, tive sucesso usando o Response.Redirect para recarregar a página e me livrar das informações de postagem após a manipulação do evento de postback. Dessa forma, o postback acontecerá apenas uma vez e atualiza a página usando o navegador não deve causar problemas. Em vez de chamar o repetidor.databind ...

Response.Redirect(Request.RawUrl);

Pode ser necessário fazer alterações no design em outras partes da sua página ou adicionar um parâmetro à sequência de consultas, indicando que você está recarregando a página, mas esse é o imposto de fornecer essa capacidade.

Os comentários acima mostram que você está atualizando sua página via F5; Isso é conhecido por causar problemas nas páginas do ASP.NET por causa de como elas postam de volta, e como o ciclo de vida funciona. Em vez disso, recomendo criar um botão de atualização na própria página, que faz o postback e atualiza as informações necessárias às quais o repetidor está vinculado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top