【发布时间】:2012-01-17 21:02:03
【问题描述】:
我一直在玩弄 SharePoint 2010,老实说,除了事件流的处理方式之外,我没有任何问题。我可能遗漏了什么。
到目前为止,我有一个可视 Web 部件,它的控件中有一个按钮和一个用于简单文本输出的标签。因此,我为自己创建了一个测试模型对象(名为 CounterModel 的简单对象类,具有 int 属性),这样我就可以轻松地通过视图状态跟踪它。
因此,在我的 Web 部件的初始化函数中,我检查 ViewState[ID_COUNTER_MODEL] 是否等于 null。如果是我创建一个新的CounterModeland 将它添加到视图状态,如果它不为空,我只需将我的ViewState[ID_COUNTER_MODEL] 添加到我的CounterModel 类型的私有属性中。
在初始化之后,我添加了一个鼠标单击按钮类型的事件侦听器。我面临的问题是,当我按下按钮时,表单被释放、重新创建,然后调用我的事件侦听器,这导致从ViewState[ID_COUNTER_MODEL] 重新分配我的 CounterModelobject。因此,事件侦听器中的任何更改都不会真正注册。我做错了什么,我应该如何处理这些情况。
以下是一些代码示例:
TestCounter 对象
class CounterModel
{
public int number;
public CounterModel() {
number = 0;
}
}
可视化 Web 部件
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;
}
【问题讨论】:
标签: c# .net sharepoint sharepoint-2010 sharepoint-2007