Frage

Ich habe ein benutzerdefiniertes Webpart und versuche, einen Übergang mit einem Klick durchzuführen WebPartManager.BrowseDisplayMode Zu SPControlMode.Edit.Leider gibt es keine direkte Möglichkeit, zwischen diesen beiden sehr unterschiedlichen Modi zu wechseln.Aber ich habe vielleicht einen erfolgreichen Prozess aufgebaut, brauche aber etwas Hilfe, da das Verhalten irgendwie albern ist.

Ich habe also einen Link-Button mit dem Text „Bearbeiten“, für den Fall, dass die Eigenschaften nicht festgelegt sind.Diese Situation wäre der Fall, wenn jemand hereinkommt und die Steuerelemente auf einer Seite ablegt und dann später die Eigenschaften zur Ausführung ausfüllt.

Link-Button-Klick-Ereignis:

void lbtnViewEdit_Click ( object sender , EventArgs e ) {
    if ( WebPartManager.DisplayMode == WebPartManager.BrowseDisplayMode) {
        WebPartManager.DisplayMode = WebPartManager.DesignDisplayMode;
        //SPContext.Current.FormContext.SetFormMode( SPControlMode.Edit , false );
    }
}

Und dann fing ich an, mit den FormContext DisplayMode-Einstellungen herumzuspielen.Derzeit befindet es sich in der CreateChildControls() Event, da ich mit den Event-Modellen gespielt habe.

protected override void CreateChildControls () {
    if ( WebPartManager.DisplayMode == WebPartManager.DesignDisplayMode ) {
        SPContext.Current.FormContext.SetFormMode( SPControlMode.Edit , false );
    }

    base.CreateChildControls();
}

Das Verhalten, das ich derzeit erlebe, ist möglicherweise ein Postback-Verhalten, aber ich bin mir nicht sicher.

Von dem BrowseDisplayMode (Veröffentlichte Seite), ich sehe den Edit LinkButton.Aber wenn ich auf die Schaltfläche „Bearbeiten“ klicke, muss ich zweimal darauf klicken, um zum zu gelangen SPControlMode.Edit Modus.Der zweite Klick auf den LinkButton bringt mich zu der Anzeige, in der ich sein möchte, aber ich möchte, dass es sich um einen Übergang mit einem einzigen Klick von der Ansicht „Veröffentlichte Seite“ zu einer Anzeige „Bearbeiten“ handelt, ähnlich wie beim Klicken auf Edit aus dem Band.

Für jede Hilfe, welchen Prozess ich verwenden sollte, wäre ich sehr dankbar.

War es hilfreich?

Lösung 2

Hier war meine endgültige Implementierung ohne Verwendung von JavaScript Modell zur Durchführung der Auswertung

if ( WebPartManager.DisplayMode == WebPartManager.BrowseDisplayMode ) {

} else if (WebPartManager.DisplayMode == WebPartManager.DesignDisplayMode) {

}

Ich mache das in meinem PageLoad, aber theoretisch könnten Sie diesen Kontrollblock überall dort platzieren, wo Sie bedingte Logik basierend auf dem aktuellen Modus ausführen müssen, in dem sich die Seite/das Webpart befindet.

Dann habe ich einige Ereignisse überschrieben:

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();
}

Andere Tipps

Es gibt einige zusätzliche Dinge, die Sie tun müssen, wenn Sie sich auf einer Veröffentlichungsseite befinden.Dies ist der JavaScript-Code, mit dem ich in der Vergangenheit erfolgreich war und das getan habe, was Sie verlangen:

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);                
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top