Question

J'ai un webpart personnalisé, je vais essayer d'aller faire un un seul clic de transition de WebPartManager.BrowseDisplayMode pour SPControlMode.Edit.Malheureusement, il n'existe pas de moyen direct de la transition entre ces deux modes très différents.Mais j'ai construit, peut-être un succès, mais besoin d'un peu d'aide, comme le comportement est un peu idiot.

Donc, j'ai un Bouton de Lien avec le texte "Modifier", dans le cas où les Propriétés ne sont pas définies.Cette situation serait le cas où quelqu'un vient et descend les contrôles sur une page et puis plus tard, remplit dans les propriétés de l'exécution.

Lien de l'événement Clic du Bouton:

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

Et puis j'ai commencé à jouer avec le FormContext DisplayMode paramètres.Actuellement, il est dans le CreateChildControls() l'événement, comme je jouais avec les modèles d'événement.

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

    base.CreateChildControls();
}

Le comportement je suis actuellement confronté, peut-être une publication comportement, mais je suis pas sûr.

À partir de la BrowseDisplayMode (Publié à la Page), je vois le Modifier LinkButton.Mais quand je clique sur le bouton Modifier, je dois cliquer deux fois pour obtenir le SPControlMode.Edit Mode.Le second clic de la LinkButton me met à l'écran que je veux être, mais je voudrais qu'elle soit un simple clic de la transition à partir d'une Page Publiée vue de Modifier l'affichage, semblable à un clic sur le Edit dans le Ruban.

Toute aide sur le processus qui je devrais utiliser, serait grandement apprécié.

Était-ce utile?

La solution 2

Voici mon final de mise en œuvre sans l'aide de l' JavaScript modèle pour effectuer l'évaluation

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

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

}

Je le fais dans mes PageLoad, mais en théorie, vous pouvez mettre ce bloc de contrôle partout où vous avez besoin pour effectuer la logique conditionnelle basée sur le mode actuel de la Page/Webpart est dans.

Puis j'ai changé quelques Événements:

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

Autres conseils

Il y a quelques trucs supplémentaires que vous devez faire si vous êtes sur une page de publication.C'est le code JavaScript que j'ai eu du succès dans le passé à faire ce que vous demandez:

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);                
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top