SharePoint Web 部件自定义属性在重新加载页面之前不会生效



我正在开发一个使用自定义属性的sharepoint 2007 web部件。这里有一个:

[Personalizable(PersonalizationScope.User), WebDisplayName("Policy Update List Name")]
[WebDescription("The name of the SharePoint List that records all the policy updates.n Default value is Policy Updates Record.")]
public string PolicyUpdateLogName
{
    get { return _PolicyUpdateLogName == null ? "Policy Updates Record" : _PolicyUpdateLogName; }
    set { _PolicyUpdateLogName = value; }
}

属性工作良好,除了更改不反映在web部件,直到你离开页面并导航回来(或只是点击主页链接)。简单地刷新页面不起作用,这让我认为这与PostBacks有关。

我目前的理论是ViewState没有足够早地加载回发数据以使更改生效。至少,ViewState在某种程度上与这个问题有关。

谢谢,迈克尔。

下面是更相关的代码:

protected override void CreateChildControls()
{
    InitGlobalVariables();
    FetchPolicyUpdateLog_SPList();
    // This function returns true if the settings are formatted correctly
    if (CheckWebPartSettingsIntegrity())  
    {
        InitListBoxControls();
        InitLayoutTable();
        this.Controls.Add(layoutTable);
        LoadPoliciesListBox();
    }
    base.CreateChildControls();
 }

protected void InitGlobalVariables()
{
    this.Title = "Employee Activity Tracker for " + PolicyUpdateLogName;
    policyColumnHeader = new Literal();
    confirmedColumnHeader = new Literal();
    pendingColumnHeader = new Literal();
    employeesForPolicy = new List<SPUser>();
    confirmedEmployees = new List<SPUser>();
    pendingEmployees = new List<SPUser>();
}

// uses the PolicyUpdateLogName custom property to load that List from Sharepoint
private void FetchPolicyUpdateLog_SPList()
{
    site = new SPSite(siteURL);
    policyUpdateLog_SPList = site.OpenWeb().GetList("/Lists/" + PolicyUpdateLogName);
}

protected void InitListBoxControls()
{
    // Init ListBoxes
    policies_ListBox = new ListBox();  // This box stores the policies from the List we loaded from SharePoint
    confirmedEmployees_ListBox = new ListBox();
    pendingEmployees_ListBox = new ListBox();
    // Postback & ViewState
    policies_ListBox.AutoPostBack = true;
    policies_ListBox.SelectedIndexChanged += new EventHandler(OnSelectedPolicyChanged);
    confirmedEmployees_ListBox.EnableViewState = false;
    pendingEmployees_ListBox.EnableViewState = false;
}

private void LoadPoliciesListBox()
{
    foreach (SPListItem policyUpdate in policyUpdateLog_SPList.Items)
    {
        // Checking for duplicates before adding.
        bool itemExists = false;
        foreach (ListItem item in policies_ListBox.Items)
            if (item.Text.Equals(policyUpdate.Title))
            {
                itemExists = true;
                break;
            }
        if (!itemExists)
            policies_ListBox.Items.Add(new ListItem(policyUpdate.Title));
    }
}

阅读一下Sharepoint web部件的生命周期。属性直到OnPreRender事件才会更新

相关内容

  • 没有找到相关文章

最新更新