質問

カスタム Web パーツがあり、ワンクリックで遷移を実行しようとしています。 WebPartManager.BrowseDisplayModeSPControlMode.Edit. 。残念ながら、これら 2 つのまったく異なるモード間を直接移行する手段はありません。しかし、私は構築しました、おそらく成功したプロセスですが、動作がちょっとばかげているため、いくつかの助けが必要です。

したがって、プロパティが設定されていない場合に備えて、「編集」というテキストが付いたリンクボタンがあります。この状況は、誰かがアクセスしてページにコントロールをドロップし、後で実行するプロパティを入力した場合です。

リンク ボタンのクリック イベント:

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 を 2 回クリックすると、希望の表示に移動しますが、リンクボタンをクリックするのと同様に、公開ページ ビューから編集表示にシングルクリックで遷移したいと考えています。 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帰属
所属していません sharepoint.stackexchange
scroll top