Я дурачился с SharePoint 2010 и, честно говоря, у меня нет никаких проблем, кроме, возможно, того, как обрабатываются потоки событий.Возможно, я что-то упустил.
На данный момент у меня есть визуальная веб-часть, в которой есть кнопка и элемент управления для простого вывода текста.Поэтому я сделал себе объект тестовой модели (простой объектный класс с именем CounterModel
со свойством int
), чтобы я мог легко отслеживать его с помощью состояния просмотра.
Так что в функции init моей веб-части япроверьте, равен ли ViewState[ID_COUNTER_MODEL]
ноль.Если это так, я создаю новый CounterModeland
и добавляю его в viewstate, а если он не нулевой, я просто добавляю свой ViewState[ID_COUNTER_MODEL]
в свое личное свойство типа CounterModel
.
После инициализации, которую я добавляюпрослушиватель событий типа щелчка мышью по кнопке.Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю кнопку, форма удаляется, воссоздается, а затем вызывает мой прослушиватель событий, что приводит к переназначению моего CounterModelobject из ViewState[ID_COUNTER_MODEL]
.Таким образом, любые изменения в слушателе событий никогда не регистрируются.Что я делаю неправильно и как мне следует обращаться с подобными ситуациями.
Вот пример кода:
Объект TestCounter
class CounterModel
{
public int number;
public CounterModel() {
number = 0;
}
}
Визуальная веб-часть
private CounterModel counterModel;
public CounterWebPart() {
if (ViewState[CounterPropertiesIndexes.ID_COUNTER_MODEL] != null){
counterModel = (CounterModel)ViewState[CounterPropertiesIndexes.ID_COUNTER_MODEL];
} else {
counterModel = new CounterModel();
ViewState[CounterPropertiesIndexes.ID_COUNTER_MODEL] = counterModel;
}
}
protected override void CreateChildControls(){
CounterWebPartUserControl control = (CounterWebPartUserControl)Page.LoadControl(_ascxPath);
Controls.Add(control);
control.GetBtnChangeLabel().Click += OnBtnChangeLabelClicked;
control.GetLabel().Text = counterModel.number.ToString();
}
public void OnBtnChangeLabelClicked(object sender, EventArgs e) {
counterModel.number++;
(CounterModel)ViewState[CounterPropertiesIndexes.ID_COUNTER_MODEL] = counterModel;
}