سؤال

لدي مدير البرنامج النصي على صفحتي الرئيسية.هناك صفحة محتوى واحدة أو صفحتان أحتاج إلى إزالة webresourse.axd منهما، لأنه يسبب مشكلات مع جافا سكريبت الأخرى على الصفحة

كيف يمكنني تعطيل مدير البرنامج النصي على هذه الصفحات؟

لا يبدو أن كائن ScriptManager يحتوي على أي خصائص قد تبدو وكأنها ستؤدي المهمة

هل هذا ممكن؟

هل كانت مفيدة؟

المحلول

حرك <asp:ScriptManager /> إلى عنصر تحكم مخصص على سبيل المثال.MyScriptManager.ascx - سيكون الرمز الوحيد في ملف .ascx هو علامة ScriptManager - ثم يمكنك تعيين مرئي الخاصية الموجودة على عنصر التحكم المخصص الخاص بك للتحكم في ما إذا كان سيتم عرض ScriptManager أم لا.

<foo:MyScriptManager id="scriptManager" runat="server" Visible="false" />

ربما يمكنك أيضًا إضافة خاصية إلى صفحتك الرئيسية والتي يمكنك استخدامها في صفحات المحتوى الخاصة بك لإظهار/إخفاء ScriptManager:

// In your master page
public bool ShowScriptManager {get; set;}

// In your master page's Page_Load
private void Page_Load(object sender, EventArgs e) {
    ...
    scriptManager.Visible = ShowScriptManager;
    ...
}

نظرًا لأن معظم صفحاتك تتطلب ScriptManager، فقد تكون فكرة جعله افتراضيًا صحيحًا - أعتقد أنه يمكنك القيام بذلك في مُنشئ صفحتك الرئيسية لأسلوب Page_Init:

public SiteMaster() {
    ...
    ShowScriptManager = true;
    ...
}

// Or alternatively
private void Page_Init(object sender, EventArgs e) {
    ...
    ShowScriptManager = true;
    ...
}

بعد ذلك، إذا قمت بتعيين MasterType في صفحات المحتوى الخاصة بك:

<%@ MasterType VirtualPath="~/path/to/master/page" %>

كل ما عليك فعله هو القيام بشيء كهذا في صفحة المحتوى تحميل الصفحة:

Master.ShowScriptManager = false;

نصائح أخرى

ويمكنك أيضا وضع مدير النصي في ContentPlaceHolder،

<asp:ContentPlaceHolder ID="cph_ScriptManager" runat="server"></asp:ContentPlaceHolder>
    <asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
</asp:ContentPlaceHolder>

وعلى الصفحات التي ترغب في إزالته، لديها آسيا والمحيط الهادئ: المحتوى نقطة العلامة في ذلك، وأنها سوف إزالته من الصفحة:

<asp:Content ID="content_SM_Overrride" ContentPlaceHolderID="cph_ScriptManager" runat="server">
<!-- ScriptManager Not Needed on this ASPX  -->
</asp:Content>

ولمن ينتهي هنا ولا تزال لا يمكن الحصول عليها للعمل مع UserControl ...

إذا كنت تستخدم صافي 4.0 يمكنك استخدام الخاصية AjaxFrameworkMode جديدة وتعيينها إلى معطل.

ScriptManager.AjaxFrameworkMode الملكية

وعلى أمل أن يساعد شخص ما!

وأود أن استخدام صفحات رئيسية متداخلة. الماجستير قاعدة التي لديها العلامات الخاصة بك مع صاحب المكان محتوى إضافي حيث الكتابة للمدير سيكون. ثم نسختين للسيد متداخلة، واحدة مع مدير السيناريو واحد دون. وصفحاتك استخدام صفحة رئيسية متداخلة المناسبة.

وأنا أغادر في النص أدناه حتى التعليقات منطقية، ولكن هذا لا يعمل ...

وماذا عن هذا:

و-وضع وappsetting في webconfig مع قائمة في URI أنك لا تريد أن يكون لها مدير النصي.
-في معالج الأحداث page_init للسيد، على أن جمع واختبار لمعرفة ما إذا كان طلب الصفحة الحالية هو في القائمة. إذا كان الأمر كذلك، إزالة scriptmanager من مجموعة الضوابط للسيد.

وأي في كود صفحة رئيسية وراء:

Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    If DirectCast(Page, System.Web.UI.Page).AppRelativeVirtualPath = "~/Test.aspx" Then
        Me.Controls.Remove(Me.FindControl("ScriptManager1"))
    End If
End Sub

ملحوظة: هناك الكثير من الخطر في ما تفعلونه. إذا كانت الصفحة الرئيسية لديه أي وحات التحديث، أو أي من الصفحات التي تقوم بإزالة مدير على أن يكون لهم، وأنهم سوف تقصف بها. هل يمكن أن يتكرر خلال مجموعة السيطرة على الماجستير والصفحة في الحرف الأول الماجستير والتحقق من وجود أي لوحات التحديث أيضا. على الرغم من أنني لست متأكدا ما كنت ستفعل إذا وجدت لهم. أن حرمانهم من المحتمل إزالة أي محتوى في نفوسهم. في أحسن الأحوال، يمكن إما 1) تقم بإزالة مدير سيناريو إذا تم العثور على لوحة التحديث، أو 2) تخصيص الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top