Pergunta

Eu tenho um costume de webpart, eu estou tentando fazer um um-clique em transição de WebPartManager.BrowseDisplayMode para SPControlMode.Edit.Infelizmente, não existe nenhuma forma directa de transição entre esses dois modos diferentes.Mas eu tenho construído, talvez o sucesso de um processo, mas necessitam de alguma ajuda, como o comportamento é uma espécie de bobo.

Então, eu tenho um Botão de Link, com o texto "Editar", no caso em que as Propriedades não estão definidas.Esta situação seria o caso em que alguém chega e interrompe a controles em uma página e, em seguida, mais tarde, preenche as propriedades para a execução.

Link do evento click do Botão:

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

E então eu comecei a tocar com o FormContext DisplayMode configurações.Atualmente, ele está no CreateChildControls() o evento, como eu estava brincando com o evento de modelos.

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

    base.CreateChildControls();
}

O comportamento atualmente, estou enfrentando, talvez um postback comportamento, mas não tenho a certeza.

Do BrowseDisplayMode (Publicado na Página), eu vejo a Editar LinkButton.Mas quando eu clicar no botão Editar, eu tenho que clicar duas vezes para ir para a SPControlMode.Edit O modo.O segundo clique do LinkButton me leva para a tela eu quero ser, mas eu gostaria de ser um simples clique de transição a partir de uma Página Publicada em vista uma Edição display, similar ao clicar no Edit a partir da faixa de opções.

Qualquer ajuda sobre o processo que eu deveria usar, seria muito apreciada.

Foi útil?

Solução 2

Aqui foi o meu final de execução sem utilizar o JavaScript modelo para realizar a avaliação

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

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

}

Eu faço isso no meu PageLoad, mas, teoricamente, você poderia colocar esse bloco de controle em qualquer lugar onde você precisa executar lógica condicional com base no atual modo de Página/web part no.

Então eu derrubou alguns Eventos:

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

Outras dicas

Há algumas coisas que você precisa fazer se você estiver em uma página de publicação.Este é o código JavaScript que eu tive sucesso com o passado, fazendo o que você está pedindo:

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);                
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top