는 방법을 찾는지 여부를 클릭 브라우저의 뒤로 버튼을 누르거나 새로고침 버튼

StackOverflow https://stackoverflow.com/questions/292204

문제

나는 찾아야하는지 여부를 클릭하는 사용자의 브라우저의 뒤로 버튼을 누르거나 새로고침 버튼을 누르시면 됩니다.

내가 필요로 리디렉션 페이지에 오류가 페이지 그 때를 클릭하시거나 새로고침 버튼을 누르시면 됩니다.이렇게 하는 방법.

내가 이것을 할 필요가에서 javascript 를 나 ASP.net 페이지

도움이 되었습니까?

해결책

우선, 사용자가 다시 사용하거나 어떤 이유로 든 페이지를 새로 고침 해야하는 경우 오류 메시지를 제공하는 것은 정말 나쁜 생각입니다. 대신, 당신은 그것을 투명하게 처리해야합니다. 운송 수준의 문제로 인해 페이지가 완전히 나타나지 않는 것에 대해 생각해보십시오. 사용자가 가진 유일한 옵션은 다시로드하거나 돌아가는 것입니다.

질문에 답하려면 사용자의 탐색을 직접 추적해야합니다. 즉, 이는 서버 측에서 의미합니다. 여기에 자바 스크립트를 잊어 버리십시오. 사용자가 웹 사이트를 방문하는 경우 해당 정보를 사용자와 관련된 세션에 저장할 수 있습니다 (이러한 고유 한 세션을 유지하는 몇 가지 방법이 있으며 여기에서는 자세히 설명하지 않습니다). 최근에 방문한 사용자가 내부 구조물에 보관하는 경우 방문중인 페이지를 두 번 방문하거나 "잘못된"방향으로 내비게이션을 결정하는 것이 쉽습니다.

사용자가 방문하는 동안 "허용 된"탐색의 그래프를 만들고 가로 지르면서 URL 사이에서 격렬하게 점프하거나 한 번에 한 단계 이상 뒤로 돌아가는 사용자에 대해 쉽게 일반화 할 수 있습니다 (예 : 한 번에 한 단계 이상 돌아 오는 것). 웹 사이트.

사용자가 "잘못된"탐색을 수행하는 경우 올바른 동작 (스텝핑, 다시로드 == 두 번 방문)은 그를 다시 추적하는 것입니다. 오류 메시지를주지 않으면 탈출 할 수 없습니다! 그는 다시로드하거나 돌아갈 수 없으므로 옵션이 남아 있지 않습니다.

다른 팁

당신은 할 수 없습니다. 브라우저는 자체 UI 이벤트를 서버로 보내지 않습니다. 당신이 얻는 것은 HTTP 요청뿐만 아니라 다른 하나는 다른 것과 비슷해 보입니다. 어쩌면 뒤로 버튼을 클릭했거나 마지막 URL을 다시 타입 한 것일 수도 있습니다. 어떤 문제를 일으키는 지 알려 주시면 프로젝트가 HTTP 프로토콜을 조금 더 잘 수행하도록 조정할 수 있습니다.

세션에 저장된 Guid/또는 타임 스탬프를 사용하여 PageToken을 구현하고 값을 양식의 숨겨진 필드와 비교하십시오. 나는 이것을 통해 이것을했다 PageToken 클래스. 숨겨진 필드와 세션 변수의 값이 일치하지 않으면 동기화되지 않고 처리합니다. 속임수는 페이지의 모든 이벤트를 매핑하는 것입니다.

public void GeneratePageToken()
{
    SessionVariables currSession = new SessionVariables();
    hfMasterPageToken.Value = System.DateTime.Now.ToString();
    currSession.PageToken = hfMasterPageToken.Value;
}

public string GetLastPageToken
{
    get
    {
        SessionVariables currSession = new SessionVariables();
        return currSession.PageToken;
    }
}

public bool TokensMatch
{
    get
    {
        SessionVariables currSession = new SessionVariables();
        return (currSession.PageToken != null
            && currSession.PageToken == hfMasterPageToken.Value);
    }
}

정기 코드 전에 이벤트 메소드에서 :

if (this.TokensMatch == false)
{
    //Reload the data.
    //Generates a NewPageToken (this.GeneratePageToken();)
    ReloadDataMethod();
    this.MessageToUser =
     "Data reloaded.  Click Edit or Insert button to change.";
    this.MessageType = MessageToUserType.Success;
    this.DisplayMessageToUser = true;
    return;
}

와 함께 Site.Master

당신의 Site.Master, 후에 <body>

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<dx:ASPxLoadingPanel ID="MainLoadingPanel" runat="server" ClientInstanceName="MainLoadingPanel" Modal="True" />
<input type="hidden" id="refreshed" value="no" />
<script type="text/javascript" language="javascript">
    MainLoadingPanel.Show();
    window.onload = function () {
        var e = document.getElementById("refreshed");
        if (e.value == "no") {
            MainLoadingPanel.Hide();
            e.value = "yes";
        } else {
            e.value = "no";
            location.reload(true); // Reload the page or redirect...
        }
    };
</script>

없이 Site.Master

일반적인 코드에서는 다음에 넣으십시오 <body>

<input type="hidden" id="refreshed" value="no" />
<script type="text/javascript" language="javascript">
    window.onload = function () {
        var e = document.getElementById("refreshed");
        if (e.value == "no") {
            e.value = "yes";
        } else {
            e.value = "no";
            location.reload(true); // Reload the page or redirect...
        }
    };
</script>

나는 당신이 약간의 행동이나 데이터를 다시 제출하지 않기 위해 포스트 백으로 인해 이것을하고 싶다고 생각합니까? 아이러니하게도, 이것은 asp.net webforms 이전에 큰 문제가 아니 었습니다 ... 일반적으로 동일한 URL 대신 다른 URL에 게시해야했기 때문입니다 (실제로 ASP.NET MVC와 마찬가지로).

가장 기술적 인 포인트에서 가장 기술적 인 지점에서는 입력 페이지와 게시물 페이지가있는 것이었지만 내가 좋아하는 한 가지 트릭. 게시물 페이지의 HTML 출력은 브라우저 이력의 현재 URL (게시물 페이지)을 결과 페이지 (또는 실제로 원하는 경우 원래 참조 페이지)로 대체 한 작은 JavaScript가있는 매우 최소한의 HTML이었습니다. 결과는 사용자가 뒤로 버튼을 클릭하거나 원래 입력 페이지로 전송되거나 새로 고침을 클릭하면 이미 새 결과 페이지에있을 것입니다.

<html><body onload="location.replace('someURL.asp')"></body></html>

제출 버튼에 속성을 넣어 Java/Struts1에서 수행했습니다. 제출 버튼을 클릭하면 actionform의 속성에 버튼 텍스트가 전송됩니다. 사용자가 정보를 새로 고치면 값이 설정되지 않았으므로 사용자가 버튼을 클릭하지 않았다는 것을 알았습니다. 이 경우 속성이 비어있는 경우, 우리는 돌아가서 페이지 흐름의 첫 페이지를 렌더링했습니다. asp.net의 ymmv.

이것은 단순히을 감지하는 경우 사용자가 땅에서 당신의 페이지를 사용하여 앞으로/뒤 버튼...만 문제가 IE8 과,낮은 브라우저 버전은 처리할 수 없다.

if(performance.navigation.type == 2)
{
    //Do your code here
}

.NET3.5 수 있는 아주 잘 처리하는 브라우저의 뒤로(그리고 앞으로)버튼이 있습니다.검색이 구글과:"Scriptmanager EnableHistory".을 제어할 수 있는 사용자 작업에 항목을 추가 브라우저의 역사(ScriptManager->AddHistoryPoint)및 ASP.NET 응용 프로그램을 받는 이벤트를 클릭할 때마다 브라우저 앞으로/뒤 버튼이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top