0

リピーターから削除するためにこのコードを書いていますが、問題があります。ページ広告を実行すると、行の1つを削除すると、この行が削除され、そのページを更新すると、削除したくない別の1行が削除されます。実際、1行を削除したいのですが、更新すると2行を削除します。ページ

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 を使用してページをリロードし、ポストバック イベントが処理された後にポストバック情報を削除することに成功しました。この方法では、ポストバックは 1 回だけ発生し、ブラウザーを使用してページを更新しても問題は発生しません。Repeater.DataBind を呼び出す代わりに...

Response.Redirect(Request.RawUrl);

ページの他の部分のデザインを変更したり、ページをリロードしていることを示すパラメーターをクエリ文字列に追加したりする必要があるかもしれませんが、それはこの機能を提供することの負担です。

于 2009-10-20T02:56:42.160 に答える
0

削除するテーブルの主キーに基づいて削除してみてください。

主キーとして messageID を持つ Messages というテーブルを削除するとします。特定のメッセージを削除したい場合は、messageID を commandArgument として送信し、それを削除します。

ページを更新したときに削除した後、同じイベントが発生します。つまり、行の削除ボタンを押してメッセージを削除すると、イベントSendBoxrep_ItemCommandが発生し、commandArgument を取得してレコードを削除します。再度 F5 を押してページを更新すると、前の削除イベントが発生します。したがって、2 つのレコードが削除されます。

主キー(messageID)を使用すると、F5 キーを押して同じイベントを 2 回発生させても、1 つのレコードのみが削除されます。

于 2009-10-20T11:50:41.237 に答える
0

上記のコメントは、F5 を使用してページを更新していることを示しています。これにより、ASP.NET ページで問題が発生することが知られています。これは、ポストバックの方法、ライフサイクルの仕組みが原因です。代わりに、ページ自体に更新ボタンを作成することをお勧めします。これにより、ポストバックが実行され、リピーターがバインドされている必要な情報が更新されます。

于 2009-10-19T11:17:38.557 に答える