Правильный способ реализации персонализации веб-части для списков - PullRequest
0 голосов
/ 01 июля 2010

Попытка проработать всю эту персонализацию веб-части и реализовать ее для списка.

Ну и конечный результат будет двумя списками со взаимозаменяемыми значениями (т. Е. Значение будет существовать только в одном из списков)

Но я не могу сохранить источник данных для этого. Так, может, я ошибаюсь?

Это то, что у меня есть для тестового тега 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.

Но это не так, слишком ли это сложно для персонализации web-персонализации, или я просто неправильно ее реализовал (что более чем вероятно)

Это мой обработчик событий для удаления элементов из списка:

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;
    }
}

Домены = Домены; там есть строка, чтобы увидеть, если явная установка значения имеет значение (поскольку удаление не сбрасывает значение поля в точности), но это не так. Я также попытался создать новый локальный DomainList, установив его в глобальный, а затем выполнив удаление / поиск, а затем установив локальный глобальный. Но тоже не работает.

1 Ответ

0 голосов
/ 01 июля 2010

Мне удалось решить эту проблему с помощью WebPart.SetPersonalizationDirty(this); в установленном аксессоре Доменов, но не возражает ли кто-нибудь за подтверждение, если это подходящий способ сделать это?

...