2010-04-30 52 views
0

我有一個自定義頁面具有以下ListFieldIterator當ControlMode = Display時,如何將ListFieldIterator指向子站點?

<SharePoint:ListFieldIterator runat="server" ControlMode="Display" OnInit="listFieldIterator_Init" /> 

這裏是Init事件:

protected void listFieldIterator_Init(object sender, EventArgs e) 
    { 
     ListFieldIterator listFieldIterator = sender as ListFieldIterator; 
     SPContext current = SPContext.Current; 
     SPFieldUrlValue value = new SPFieldUrlValue(current.ListItem[SPBuiltInFieldId.URL].ToString()); 
     Uri uri = new Uri(value.Url); 
     using (SPWeb web = current.Site.OpenWeb(uri.AbsolutePath)) 
     { 
      SPListItem item = web.GetListItem(uri.PathAndQuery); 
      if (null != item) 
      { 
       listFieldIterator.ItemContext = SPContext.GetContext(this.Context, item.ID, item.ParentList.ID, web); 
      } 
     } 
    } 

一切都很正常,如果目標列表項在同一站點的頁面。但是,一旦它指向不同的網站,所有的領域出現,但值都出現在以下格式:

無法呈現「標題」列 ,因爲一個錯誤的「單 行文字「字段類型控制。請參閱日誌中的 詳細信息。異常消息: 列表不存在您選擇的頁面 包含不存在 的列表。它可能已被 其他用戶刪除..

如果我將ControlMode更改爲Edit,則值正確顯示。那麼如何在顯示模式下使其工作?

回答

2

我做了一些更多的研究here,herehere。最後兩個讓我創建了以下自定義控件,它可以在Display模式下正確呈現ListFieldIterator:

public class RecursiveListFieldIterator : ListFieldIterator 
{ 
    protected override void Render(System.Web.UI.HtmlTextWriter output) 
    { 
     SPWeb web = SPControl.GetContextWeb(this.Context); 
     SPControl.SetContextWeb(this.Context, this.ItemContext.Web); 
     base.Render(output); 
     SPControl.SetContextWeb(this.Context, web); 
    } 
} 
+0

保存了很多努力:) – 2012-11-23 08:41:17

相關問題