相信大家經常進行編輯(配置)WebPart的屬性等操作.
有些時候,在我們配置屬性的時候,可能我們會希望這個時候,頁面上的webpart地區顯示其它內容或提示資訊.
那我們如何判斷我們是不是在編輯模式中呢?
可能大家知道這樣一個小竅門:在URL中加上DisplayMode=Design就可以讓當前頁面進入設計模式.
那我們可以通過判斷DisplayMode及其值來判斷當前頁面是否處於編輯模式中.
但是:如果我們通過點擊"編輯頁面"進入的話,將不會有這個查詢參數存在在URL中.
----
不知道 SharePoint有沒有提供相關的API給我們操作,反正我是沒有找到.反而是找到幾個相關的東東:
WebPart中有個事件處理方法:OnEditModeChanged,很可能的是,事件參數是EventArgs,並沒有指明當前頁面是否正處於編輯模式中?
而WebPartManage有兩個方法:BeginWebPartEditing和EndWebPartEditing,同樣很可惜,也沒有直接指明是不是在編輯中.
沒辦法,走偏方:
每一個模式下,我們都可以發現HTML源碼中,都有MSOSPWebPartManager_DisplayModeName這個隱藏欄位. 而在不同的模式下,其值是不一樣的:
瀏覽:Browse 頁面編輯:Design WebPart編輯:Edit
OK,足夠了,這3個值再加上DisplayMode,足夠我們折騰的了.
<---題外:在HTML源碼中,還有不少值得我們研究的東東,也許一些感覺棘手的問題,答案就在其中-->
----
折騰完後,我搞出這樣一個方法:
1 public bool CheckIsEditing()
2 {
3 //if (null == this.Page.Request["MSOLayout_InDesignMode"])
4 // return false;
5 //string strMode = this.Page.Request["MSOLayout_InDesignMode"].ToLower().Trim();
6 //if (strMode == "1")
7 // return true;
8 //return false;
9 if (!string.IsNullOrEmpty(Page.Request["DisplayMode"]) && Page.Request["DisplayMode"].ToLower().Trim() == "design")
10 return true;
11 if (null == this.Page.Request["MSOSPWebPartManager_DisplayModeName"] )
12 return false;
13 string strMode = this.Page.Request["MSOSPWebPartManager_DisplayModeName"].ToLower().Trim();
14 if (strMode == "browse")
15 return false;
16 if (strMode == "design" || strMode=="edit")
17 return true;
18 return false;
19
20 }
不知道些方法好不好用,先記錄在些,權當記流水帳了.
----話說:深圳的天氣真TMD熱,而我等P民買不起空調,只有天天蒸桑拿!!!!