문제

내 내부에서 비동기 포스트백을 수행한 후 내 페이지 제목이 표준 "제목 없는 페이지"로 재설정된다는 사실을 최근에 확인했습니다. UpdatePanel 메인 페이지에서.마스터 페이지 내부에서 포스트백하는 동안(예: 마스터 페이지 내부의 검색 상자 버튼을 클릭하는 경우) 제목이 손실되지 않습니다.

나는 다른 것을 사용하여 가정했다 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/...

페이지 로드에서 프로그래밍 방식으로 이에 액세스할 수도 있습니다.

다른 팁

우리 사이트 중 하나에서 정확한 문제가 발생했습니다.

즉각적인 수정은 마스터 페이지 코드 숨김 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;
        });
});

프로그래밍 방식으로 제목을 설정할 때 발생하며 PostBack이 아닌 경우에만 발생합니다.뷰스테이트 백에 제목을 담기 위해 포스트백 저장/로드 메소드를 다시 작성하세요.

    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에 페이지 제목을 넣은 다음 버튼 포스트백 Click 이벤트에서 문자열을 가져와 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