Alterando o Modo de BrowseDisplayMode para o Modo de Edição
-
10-12-2019 - |
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.
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);
}
}