سؤال

لقد لاحظت للتو مؤخرًا أن عنوان صفحتي سيعيد ضبطه على "الصفحة بدون عنوان" القياسية بعد أن أقوم بإجراء Asyncpostback من داخل My UpdatePanel في الصفحة الرئيسية. لن يتم فقد العنوان أثناء Postback من داخل الصفحة الرئيسية (مثل عندما أقوم بالنقر فوق الزر مربع البحث داخل الصفحة الرئيسية).

افترضت ذلك باستخدام مختلف contentplaceholder على وجه التحديد لإعداد عنوان المستند ، كنت سأتجنب مشكلات مثل هذه ، ولكن يبدو أنني كنت مخطئًا. هل هناك شيء آخر أفتقده بخلاف الاضطرار إلى تعيين العنوان بشكل صريح في الكود-من صفحة ASPX (التي كنت آمل أن أتجنبها بالطريقة التي تم بها الإعداد أدناه)؟

فيما يلي جوهر صفحتي الأساسي الذي يتصل بالصفحة الرئيسية (رمز الصفحة الرئيسية أدناه)

<asp:Content ID="Content1" ContentPlaceHolderID="title" Runat="Server">
    Page Title
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="head" Runat="Server">
    <script type="text/javascript">
        //random javascript validators
    </script>   
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="content" Runat="Server">
    <div class="title">
        Account Management
    </div>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            //Username + Password Set Form
        </ContentTemplate>       
    </asp:UpdatePanel>

</asp:Content>

هذه هي الصفحة الرئيسية. يتم وضع ASP.NET AJAX ScriptManager أول شيء بعد <form> علامة في الجسم.

<head id="Head1" runat="server">
    <title>
        <asp:ContentPlaceHolder id="title" runat="server">
        </asp:ContentPlaceHolder>
    </title>
        //Stylesheet references

    <script type="text/javascript">
        //Random javascript functions
    </script>

    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
هل كانت مفيدة؟

المحلول

هل تعارض استخدام خاصية عنوان صفحة المحتوى؟

<%@ Page Title="Your Page Title" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/...

يمكنك أيضًا الوصول إلى هذا برمجيًا في تحميل الصفحة ...

نصائح أخرى

واجهنا هذه القضية الدقيقة في أحد مواقعنا.

كان الإصلاح الفوري هو إعادة تعيين العنوان في طريقة PageBehind Page_Load الرئيسية.

على ما يبدو عندما تحدث مكالمة Ajax ، يتم إعادة تشغيل الصفحة الرئيسية. كان هذا يتسبب في اختفاء عنواننا.

فمثلا:

protected void Page_Load(object sender, EventArgs e) {
    this.Page.Title = "whatever title you have...";
}

الإصلاح الأفضل هو إسقاط حماقة MS UpdatePanel والبدء في استخدام JSON / JQUERY حيث يكون لديك بالفعل بعض التحكم اللائق في المكالمات.

هو خطأ غريب يمكن عمله إذا قمت بإزالة المساحات في علامة العنوان مثل:

<title><asp:ContentPlaceHolder id="title" runat="server"></asp:ContentPlaceHolder></title>

تم اختباره على SharePoint 2010

بدلاً من تغيير رمز جانبي الخادم الخاص بك ، لماذا لا تصلحه فقط في JS:

$(function(){
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    if (!(prm)) return;
    document.orginalTitle=document.title;
    prm.add_endRequest(function(s, e){
        if (document.title.replace(/\s/g,"").length==0)
            document.title=document.orginalTitle;
        });
});

يحدث ذلك عندما تقوم بتعيين العنوان بشكل progammally وفقط عندما لا يكون Postback. ما عليك سوى إعادة كتابة أساليب حفظ/تحميل طرق Postback لعقد العنوان في حقيبة ViewState.

    protected override void LoadViewState(object savedState)
    {
        object[] allStates = (object[])savedState;
        if (allStates[0] != null)
            base.LoadViewState(allStates[0]);
        if (allStates[1] != null)
            Page.Title = (string)allStates[1];
    }

    protected override object SaveViewState()
    {
        object[] allStates = new object[2];
        object baseState = base.SaveViewState();
        string pageTitle = Page.Title;
        allStates[0] = baseState;
        allStates[1] = pageTitle;
        return allStates;
    }

يمكنك وضع عنوان الصفحة في ViewState ومن ثم فقط الاستيلاء على السلسلة في الحدث Postn Postback وتعيينه إلى page.title

    public string MyPageTitle
    {
        get
        {
            return (string)ViewState["MyPageTitle"];
        }
        set
        {
            ViewState["MyPageTitle"] = value;
        }
    }

في صفحة تحميل الصفحة: myPagetitle = "عنوان صفحة الويب الرائع" ؛ ثم في الحدث انقر فوق الزر:

protected void MyLinkButton_Click(object sender, EventArgs e)
    {

       Page.Title = MyPageTitle;

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