正确的方法来实现列表框的Web部件个性化

时间:2010-07-01 12:13:00

标签: c# asp.net web-parts

尝试计算整个Web部件的个性化,并尝试将其实现为列表框。

最终结果将是两个列表框,具有可互换的值(即,一个值仅存在于其中一个列表框中)

但是我不能维护它的数据源。所以也许我错了?

这就是我对页面上的测试H2标签所拥有的内容

[Personalizable(PersonalizationScope.User)]
public string LabelText {
    get { return h2Test.InnerText; }
    set { h2Test.InnerText = value; }
}

它工作正常,如果我有一个文本框并使用它来更改LabelText的值,那么当我关闭浏览器时它会自动保持更改。

所以我想,好吧,那么也许同样适用于列表框

[Personalizable(PersonalizationScope.User)]
public DomainList Domains {
    get { return (DomainList)lstBxDomains.DataSource; }
    set {
        lstBxDomains.DataSource = value;
        lstBxDomains.DataBind();
    }
}

其中DomainList只是一个扩展List的类,而Domain只是一个三字段类,int,string,string。

但事实并非如此,因此对于webpart个性化自动化来说这太复杂了,或者我只是错误地实现它(这很可能)(

这是我从列表中删除项目的事件处理程序:

protected void btnRemDomain_Click(object sender, EventArgs e) {
    if (IsPostBack && lstBxDomains.SelectedIndex > -1) {
        for (int i = 0; i < lstBxDomains.Items.Count; i++) {
            if (lstBxDomains.Items[i].Selected) {
                Domains.Remove(Domains.Find(d => d.ID.ToString() == lstBxDomains.Items[i].Value));
            }
        }
        Domains = Domains;
    }
}

The Domains = Domains; line是在那里看看是否显式设置值有差异(因为删除不会实际重置字段的值),但它没有。我还尝试创建一个新的本地DomainList,将其设置为全局,然后对其进行删除/查找,然后将本地域设置为全局。但也没有工作。

1 个答案:

答案 0 :(得分:0)

我已设法通过在域名的设置访问者中使用WebPart.SetPersonalizationDirty(this);来解决此问题,但有人会介意确认这是否是一种合适的方法吗?