2012-02-28 32 views
5

Tôi có câu hỏi này nhiều lần và chán khi cố tìm giải pháp tốt. Không hiểu lý do tại sao microsoft không bao gồm phương pháp có thể dễ dàng xác định chế độ của trang hiển thị: "hiển thị bình thường" hoặc trong "chế độ thiết kế". Nó có nhiều lời khuyên kiểm tra các biến khác nhau, nhưng nó không thể nói duy nhất trang đó trong thiết kế trên các loại trang khác nhau (trang webpart và trang wiki) và trên postback hay không.Xác định chế độ hiển thị của trang chia sẻ

cuối cùng mệt mỏi tôi và tôi viết những dòng này:

public static bool IsDesignTime() 
    { 
     if (SPContext.Current.IsDesignTime) return true; 

     if (HttpContext.Current.Request.QueryString["DisplayMode"] != null) 
      return true; 

     var page = HttpContext.Current.Handler as Page; 

     if(page == null) return false; 

     var inDesign = page.Request.Form["MSOLayout_InDesignMode"]; 
     var dispMode = page.Request.Form["MSOSPWebPartManager_DisplayModeName"]; 
     var wikiMode = page.Request.Form["_wikiPageMode"]; 
     var we = page.Request.Form["ctl00$PlaceHolderMain$btnWikiEdit"]; 

     if (inDesign == null & dispMode == null) return false; //normal display 

     if (we == "edit") return true; //design on wiki pages 

     if (page is WikiEditPage & page.IsPostBack & inDesign == "" & dispMode == "Browse" & wikiMode == "") return false; //display wiki on postback 


     if (inDesign == "" & dispMode == "Browse" & (wikiMode == null | wikiMode == "")) return false; //postback in webpart pages in display mode 

     if (inDesign == "0" & dispMode == "Browse") return false; //exiting design on webpart pages 

     return true; 
    } 

Không ai có giải pháp tốt hơn?

+1

Trong trang Xuất bản, truy cập trang. Thuộc tính không phù hợp với ngoại lệ. (HttpContext.Current.Request có thể được sử dụng thay thế. –

+0

Đối với các trang wiki và chỉ các trang wiki, mã của bạn đã cho tôi giải pháp: page.Request.Form ["ctl00 $ PlaceHolderMain $ btnWikiEdit"] == "edit". Mã FormMode chăm sóc các trang không phải là wiki – CigarDoug

Trả lời

2

hãy thử mã này ..

if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Display) 
    { 
    // your code to support display mode 
    } 
    else // Microsoft.SharePoint.SPContext.Current.FormContext.FormMode = SPControlMode.Edit 
    { 
    // your code to support edit mode 
    } 
+0

Nó không hoạt động trên WebPartPage – devi

+0

Kiểm tra liên kết này http://www.codeproject.com/Articles/24019/Switch-a-SharePoint-WebPart-page-display-mode-to -E –

5

nếu công việc của bạn trong WebpartPage hơn dưới đây làm việc mã cho tôi

WebPartManager mgr = this.WebPartManager; 
if (mgr.DisplayMode == WebPartManager.EditDisplayMode) 
    { 
     // logic when in Edit Mode 
    } 
else 
    { 

    } 
+0

Có, nó hoạt động trong trang webpart, nhưng không phải trong trang wiki – devi

+1

Tôi đã đến bài viết này với WebPartPage trong tâm trí.Đây là một khởi đầu tốt, [SPTechBytes] này (http://sptechbytes.blogspot.com/2013/ 11/sharepoint-2013-handling-page-display.html) bài viết cho thấy sự khác biệt giữa 3 chế độ chính – GoldBishop

+0

page.Request.Form ["ctl00 $ PlaceHolderMain $ btnWikiEdit"] == "chỉnh sửa" hoạt động cho các trang wiki. mã trên hoạt động fo r các trang không phải wiki. – CigarDoug

12

bạn có 2 trường hợp để phát hiện các chế độ page:

Trong trường hợp bạn đang sử dụng site nhóm:

if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Edit) 
    { 
     ltr.Text = "EditMode2"; 
    } 
    else 
    { 
     ltr.Text = "ViewMode"; 
    } 

trong trường hợp bạn đang sử dụng một trang web xuất bản:

if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Display) 
    { 
    // your code to support display mode 
    } 
    else // Microsoft.SharePoint.SPContext.Current.FormContext.FormMode = SPControlMode.Edit 
    { 
    // your code to support edit mode 
    } 
3

Tôi đã có một thời gian khó khăn nhận được bất kỳ những câu trả lời cho việc trong Sharepoint 2013 cho tất cả các kịch bản. Tôi cũng không thể nhận được EditModePanel để hoạt động ổn định. Tôi đã tìm thấy một đoạn mã trong this article dường như hoạt động trong mọi viễn cảnh mà tôi đã thử cho đến thời điểm này.

var isPublishing = SPContext.Current.FormContext.FormMode != SPControlMode.Invalid; 
var wpDMode = WebPartManager.GetCurrentWebPartManager(Page).DisplayMode.Name; 
var isEditing = isPublishing 
    ? SPContext.Current.FormContext.FormMode != SPControlMode.Display 
    : (wpDMode.Equals("Edit") || wpDMode.Equals("Design")); 

Sau đó, bạn chỉ cần kiểm tra isEditing để biết điều kiện của mình.

Các vấn đề liên quan