Вопрос

Я пишу этот код для удаления из ретранслятора, но у меня есть проблема. Когда я запускаю свою страницу объявления об одном из строк, эта строка удаляется, и когда я обновляю эту страницу, еще один ряды удалили, что я не хочу удалять это. На самом деле я хочу удалить одну строку, но удалить две строки, когда обновляю страница

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();
    }
}
Это было полезно?

Решение

Попробуйте удалить в зависимости от первичного ключа таблицы UR Deleting.

Предположим, что вы удаляете таблицу, говорится, что сообщения, которые имеют MessageId в качестве первичного ключа. Теперь, если вы хотите удалить конкретное сообщение, отправьте MessageID в качестве CommandArgument и удалите его.

После удаления, когда вы обновляете страницу, происходит то же событие, т. Е. Если вы нажмете кнопку «Удалить» в строке, чтобы удалить сообщение событие Sendboxrep_itemcommand уволен и взяв командные, он удаляет запись. Снова нажимаете F5, чтобы обновить страницу, затем запускается предыдущее событие для удаления. Таким образом, ваши две записи удаляются.

Теперь используя первичный ключ (MessageId) Он удалит только одну запись, даже если вы дважды стреляете в одно и то же событие, нажав F5.

Другие советы

В таком сценарии я добился успеха, используя ответ. RedieRect для перезагрузки страницы и избавления от информации о возврате после обработки события для обращения. Таким образом, отправщик произойдет только один раз, и обновление страницы с помощью браузера не должно вызывать никаких проблем. Вместо того, чтобы называть ретранслятор. Датабинд ...

Response.Redirect(Request.RawUrl);

Возможно, вам придется внести изменения в дизайн в другие части вашей страницы или добавить параметр к строке запроса, указывающий, что вы перезагружаете страницу, но это налог на предоставление этой способности.

Комментарии выше показывают, что вы освежаете свою страницу через F5; Известно, что это вызывает проблемы на страницах ASP.NET из -за того, как они публикуют обратно, как работает их жизненный цикл. Вместо этого я рекомендую создать кнопку обновления на самой странице, которая делает отправку и обновляет необходимую информацию, с которой переходит ретранслятор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top