سؤال

لدي جزء ويب مخصص، وأحاول القيام بالانتقال منه بنقرة واحدة 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() الحدث، حيث كنت ألعب مع نماذج الحدث.

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

نصائح أخرى

هناك بعض الأشياء الإضافية التي يتعين عليك القيام بها إذا كنت في صفحة النشر.هذا هو كود جافا سكريبت الذي نجحت في استخدامه في الماضي لتنفيذ ما تطلبه:

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