将模式从浏览显示模式更改为编辑模式
-
10-12-2019 - |
题
我有一个自定义 Web 部件,我正在尝试从 WebPartManager.BrowseDisplayMode
到 SPControlMode.Edit
. 。不幸的是,没有直接的方法可以在这两种截然不同的模式之间进行转换。但我已经建立了,也许是一个成功的过程,但需要一些帮助,因为这种行为有点愚蠢。
因此,如果未设置属性,我有一个带有文本“编辑”的链接按钮。这种情况是这样的情况:有人进来并将控件放到页面上,然后填充属性以供执行。
链接按钮点击事件:
void lbtnViewEdit_Click ( object sender , EventArgs e ) {
if ( WebPartManager.DisplayMode == WebPartManager.BrowseDisplayMode) {
WebPartManager.DisplayMode = WebPartManager.DesignDisplayMode;
//SPContext.Current.FormContext.SetFormMode( SPControlMode.Edit , false );
}
}
然后我开始使用 FormContext DisplayMode 设置。目前它处于 CreateChildControls()
事件,因为我正在玩事件模型。
protected override void CreateChildControls () {
if ( WebPartManager.DisplayMode == WebPartManager.DesignDisplayMode ) {
SPContext.Current.FormContext.SetFormMode( SPControlMode.Edit , false );
}
base.CreateChildControls();
}
我当前遇到的行为可能是回发行为,但我不确定。
来自 BrowseDisplayMode
(已发布页面),我看到编辑链接按钮。但是当我单击“编辑”按钮时,我必须单击两次才能进入 SPControlMode.Edit
模式。第二次单击 LinkButton 可以让我进入我想要的显示,但我希望它是从“已发布页面”视图到“编辑”显示的单击转换,类似于单击 Edit
从功能区。
任何关于我应该使用哪个过程的帮助,将不胜感激。
解决方案 2
这是我的最终实现,没有使用 JavaScript
执行评估的模型
if ( WebPartManager.DisplayMode == WebPartManager.BrowseDisplayMode ) {
} else if (WebPartManager.DisplayMode == WebPartManager.DesignDisplayMode) {
}
我在 PageLoad 中执行此操作,但理论上您可以将此控制块放置在需要根据页面/Web 部件所处的当前模式执行条件逻辑的任何位置。
然后我覆盖了一些事件:
protected override void CreateChildControls () {
if ( WebPartManager.DisplayMode == WebPartManager.DesignDisplayMode ) {
SPContext.Current.FormContext.SetFormMode( SPControlMode.Edit , false );
}
base.CreateChildControls();
}
protected override void OnPreRender ( EventArgs e ) {
if ( ProviderPart != null ) {
ProviderPart.GetParametersData( new ParametersCallback( SetProviderData ) );
}
base.OnPreRender( e );
}
protected override void OnInit ( EventArgs e ) {
base.OnInit( e );
InitializeControl();
}
其他提示
如果您在发布页面上,则需要执行一些额外的操作。这是我过去成功完成您所要求的操作的 JavaScript 代码:
function ChangeToEditMode(){
if (window.location.search.match("[?&]PageView=Shared")){
var inDesignMode = document.forms[MSOWebPartPageFormName].MSOLayout_InDesignMode.value;
if (inDesignMode == "1")
{
// page is in edit mode
}
}
else{
if (document.forms["aspnetForm"]["MSOLayout_InDesignMode"] != null)
document.forms["aspnetForm"]["MSOLayout_InDesignMode"].value = 1;
if (document.forms["aspnetForm"]["MSOAuthoringConsole_FormContext"] != null)
document.forms["aspnetForm"]["MSOAuthoringConsole_FormContext"].value = 1;
if (document.forms["aspnetForm"]["MSOSPWebPartManager_DisplayModeName"] != null)
document.forms["aspnetForm"]["MSOSPWebPartManager_DisplayModeName"].value = "Design";
ChangeLayoutMode(false);
}
}