Изменение режима с BrowseDisplayMode на режим редактирования

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/95599

Вопрос

У меня есть пользовательская веб-часть, я пытаюсь выполнить переход в один клик от WebPartManager.BrowseDisplayMode к SPControlMode.Edit.К сожалению, не существует прямого способа перехода между этими двумя очень разными режимами.Но я построил, возможно, успешный процесс, но мне нужна помощь, так как поведение довольно глупое.

Итак, у меня есть кнопка ссылки с текстом «Изменить» на тот случай, если свойства не установлены.Это может быть тот случай, когда кто-то входит и помещает элементы управления на страницу, а затем позже заполняет свойства для выполнения.

Событие нажатия кнопки ссылки:

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

А затем я начал экспериментировать с настройками FormContext DisplayMode.В настоящее время оно находится в CreateChildControls() event, когда я играл с моделями событий.

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

    base.CreateChildControls();
}

Поведение, которое я сейчас испытываю, возможно, поведение обратной передачи, но я не уверен.

Из BrowseDisplayMode (Опубликованная страница), я вижу кнопку «Редактировать ссылку».Но когда я нажимаю кнопку «Изменить», мне приходится щелкнуть ее дважды, чтобы перейти к SPControlMode.Edit Режим.Второй щелчок LinkButton переводит меня на экран, на котором я хочу находиться, но я бы хотел, чтобы это был переход одним щелчком мыши от просмотра опубликованной страницы к экрану редактирования, аналогично нажатию кнопки Edit из ленты.

Буду очень признателен за любую помощь в выборе процесса, который мне следует использовать.

Это было полезно?

Решение 2

Вот моя окончательная реализация без использования JavaScript модель для выполнения оценки

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

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

}

Я делаю это в PageLoad, но теоретически вы можете разместить этот блок управления в любом месте, где вам нужно выполнить условную логику на основе текущего режима, в котором находится страница/веб-часть.

Затем я переопределил некоторые события:

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

Другие советы

Если вы находитесь на странице публикации, вам нужно сделать кое-что еще.Это код JavaScript, с которым мне удалось добиться успеха в прошлом, выполняя то, что вы просите:

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);                
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top