Domanda

Ho un WebPart personalizzato, sto cercando di effettuare una transizione a un clic da WebPartManager.BrowseDisplayMode a SPControlMode.Edit. Sfortunatamente, non vi è alcun mezzo diretto di transizione tra queste due modalità molto diverse. Ma ho costruito, forse un processo di successo ma ha bisogno di aiuto, poiché il comportamento è un po 'sciocco.

Quindi ho un pulsante di collegamento, con il testo "Modifica", nel caso in cui le proprietà non siano impostate. Questa situazione sarebbe il caso in cui qualcuno entra e lascia cadere i comandi su una pagina e poi in seguito riempie le proprietà per l'esecuzione.

Tasto link Click Event:

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

E poi ho iniziato a giocare con le impostazioni del displayMode di FormContext. Attualmente è nell'evento CreateChildControls(), come stavo giocando con i modelli di eventi.

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

    base.CreateChildControls();
}
.

Il comportamento che sto attualmente sperimentando, forse un comportamento postback, ma non sono sicuro.

Dal BrowseDisplayMode (pagina pubblicata), vedo il tasto LinkButton Modifica. Ma quando faccio clic sul pulsante Modifica, devo fare clic due volte per arrivare alla modalità SPControlMode.Edit. Il secondo clic del linkButton mi porta al display che voglio essere dentro, ma vorrei che sia una transizione a singolo clic da una visualizzazione di pagine pubblicata su un display di modifica, simile a fare clic sul Edit dal nastro. .

Qualsiasi aiuto su quale processo dovrei usare, sarebbe molto apprezzato.

È stato utile?

Soluzione 2

Here was my final implementation without using the JavaScript model to perform the evaluation

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

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

}

I do this in my PageLoad, but theoretically you could put this control block anywhere where you need to perform conditional logic based on the current mode the Page/Webpart is in.

Then i overrode some Events:

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

Altri suggerimenti

There is some extra stuff you need to do if you are on a publishing page. This is the JavaScript code I've had success with in the past doing what you are asking:

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);                
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top