2012-02-02 38 views
0

我有一個Sharepoint網站和一個文檔庫。我已經設置了一些自定義視圖,並希望用戶能夠選擇他們喜歡的視圖。這在'AllItems.aspx'視圖中正常工作 - 即,當我單擊Web部件的標題時,它會帶我到一個新頁面,看起來似乎是一個'完整的'DocLib頁面。將AllItems.aspx顯示爲Web部件?

但是,大多數用戶將通過選項卡式門戶網站訪問,因此會查看「Web部件」視圖。

我的問題是:有沒有辦法在Web部件中顯示AllItems視圖?具體來說,我想要很好的左側工具欄(顯示我的各種視圖)出現在Web部件中。

回答

0

您可以使用視圖的RenderAsHtml()方法。

此方法返回一個HTML字符串,您可以在Web部件中顯示該字符串。但要小心,有關於上下文ID的錯誤。

我建議使用下列函數用於手動設置的ID:

public static String RenderAsHtmlWithFix(SPView view, uint id) 
{ 
    String html = String.Empty; 
    if (view != null) 
    { 
     html = view.RenderAsHtml(); 
     String ctxIDString; 
     int ctxID; 
     GetCtxID(html, out ctxIDString, out ctxID); 
     if (Int32.TryParse(ctxIDString, out ctxID)) 
     { 
      html = html.Replace("ctx" + ctxID, "ctx" + id); 
      html = html.Replace("ctxId = " + ctxID, "ctxId= " + id); 
      html = html.Replace("CtxNum=\"" + ctxID + "\"", "CtxNum=\"" + id + "\""); 
      html = html.Replace("FilterIframe" + ctxID, "FilterIframe" + id); 
      html = html.Replace("titl" + ctxID + "-", "titl" + id + "-"); 
      html = html.Replace("tbod" + ctxID + "-", "tbod" + id + "-"); 
      html = html.Replace("foot" + ctxID + "-", "foot" + id + "-"); 
      html = html.Replace("up('" + ctxID + "-", "up('" + id + "-"); 
      html = html.Replace("img_" + ctxID + "-", "img_" + id + "-");   
     } 
    } 
    return html; 
} 

private static void GetCtxID(String html, out String ctxIDString, out int ctxID) 
{ 
    int idIndex = html.IndexOf("ctxId ="); 
    ctxIDString = String.Empty; 
    for (int i = idIndex + 7; html[i] != ';'; i++) 
    { 
     ctxIDString += html[i]; 
    } 
    ctxIDString = ctxIDString.Trim(); 
    ctxID = 1; 
} 
相關問題