3

カスタムプロパティを使用するSharePoint 2007 Webパーツを開発しています。ここでは一つです:あなたがページを離れて戻ってナビゲート(または単にホームページのリンクをクリックしてください)までSharePoint 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)); 
    } 
} 

答えて

1

一部は、SharePointのWebパーツのライフサイクル上に読んでいます。プロパティは、OnPreRenderイベントまで更新されません。

+0

ありがとう、私はそれを調べます。正確なライフサイクルのための信頼できるリソースを見つけるのに苦労していましたが、何か提案がありますか? – mklbtz

+0

http://sharepoint.stackexchange.com/questions/27526/changes-not-reflecting-in-webpart/27539#27539を参照してください。 – Ryan

関連する問題