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

网页是无状态的。如果重新加载页面,所有控件和数据都会重新创建。这就是我们使用 Viewstates 和 Session 变量等东西来跨 post/gets 持久化数据的原因。使用缓存和更新面板等其他技术只会隐藏您正在使用视图状态的事实。我能想到的唯一选择是读取/写入某些数据源(数据库或 XML 等平面文件),但这比使用视图状态或会话的开销更大。也许如果你解释你想要避免这些选项的原因,我们可以想出一个解决方案?

于 2013-03-27T11:03:18.757 回答