0

グリッドビューにデータバインドされたオブジェクトのリストがあります。グリッドビューには、行に添付された削除ボタンがあります。

(オフラインで作業しているかのように) クリックしても保持するオブジェクトのリストが必要です セッション、Cookie、またはビューステートを使用したくありません

現在の動作: リストに 4 つのアイテムがある => 1 つのアイテムを削除する => リストに 3 つのアイテムがある => 1 つのアイテムを削除する (POSTBACK) リストは 4 つのアイテムで再生成され、その後 1 つ削除されます。

class Emails
{
    public string Email { get; set; }
    public Emails(string _Address)
    {
        Email = _Address;
    }
}


        if (!IsPostBack)
        {
            ListOfEmails = new List<Emails>();
            ListOfEmails.Add(new Emails("1@a.com"));
            ListOfEmails.Add(new Emails("2@a.com"));
            ListOfEmails.Add(new Emails("3@a.com"));
            ListOfEmails.Add(new Emails("4@a.com"));

            GridView1.DataSource = ListOfEmails;
            GridView1.DataBind();
        }

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string EmailToBeDeleted = GridView1.Rows[e.RowIndex].Cells[0].Text;
        ListOfEmails.Remove(ListOfEmails.Find(L => L.Email == EmailToBeDeleted));
        GridView1.DataSource = null;
        GridView1.DataSource = ListOfEmails;
        GridView1.DataBind();
    }

aspx:

        <asp:BoundField DataField="Email" HeaderText="Email Address" />
        <asp:ButtonField ButtonType="Button" CommandName="Delete" HeaderText="Action2" 
            ShowHeader="True" Text="Delete" />    
        <asp:CommandField ButtonType="Image" DeleteImageUrl="~/delete.gif" 
            ShowDeleteButton="True" />

「現在、2 つの削除ボタンがあります」

4

1 に答える 1

0

Web ページはステートレスです。ページをリロードすると、すべてのコントロールとデータが再作成されます。これが、ビューステートやセッション変数などを使用して、ポスト/取得間でデータを保持する理由です。キャッシュや更新パネルなどの他のテクノロジを使用しても、ビュー ステートを使用しているという事実が隠されるだけです。私が考えることができる唯一のオプションは、いくつかのデータ ソース (データベースまたは XML のようなフラット ファイル) を読み書きすることですが、これはビューステートやセッションを使用するよりもオーバーヘッドが大きくなります。これらのオプションを回避したい理由を説明していただければ、解決策を思いつくことができるでしょうか?

于 2013-03-27T11:03:18.757 に答える