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?
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ế. –
Đố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