我有一个自定义 Web 部件,我正在尝试从 WebPartManager.BrowseDisplayModeSPControlMode.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 模式。第二次单击 LinkBut​​ton 可以让我进入我想要的显示,但我希望它是从“已发布页面”视图到“编辑”显示的单击转换,类似于单击 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);                
    }
}
许可以下: CC-BY-SA归因
scroll top