ASP.NET에서 페이지를 어떻게 새로 고치나요? (코드로 다시로드하자)


158

ASP.NET에서 페이지를 어떻게 새로 고치나요? (코드로 다시로드하자)

Sharepoint 내의 웹 파트 내부의 사용자 정의 컨트롤에 있기 때문에 내가 페이지가 있는지 여부를 알 수 없기 때문에 Response.Redirect ()를 사용하지 않습니다.


2
OP는 아니지만 자바 스크립트를 비활성화 할 수 있기 때문에 한 가지 이유가 있습니다.
— Nathan Koop

11
ASP.NET은 자바 스크립트에 의존하므로 사용자가 자바 스크립트를 비활성화하면 더 큰 문제가 발생합니다.
— jrummell

답변:


45

페이지가 클라이언트에 렌더링되면 새로 고침을 강제하는 방법은 두 가지뿐입니다. 하나는 자바 스크립트입니다

setTimeout("location.reload(true);", timeout);

두 번째는 메타 태그입니다.

<meta http-equiv="refresh" content="600">

서버 측에서 새로 고침 간격을 설정할 수 있습니다.


setTimeout을 어디에 두어야합니까?
— Siti

.NET을 사용하여 .NET에서이를 수행하는 좋은 방법은 아래 @gaurav의 답변을 참조하십시오 Server.TransferRequest.
— sfarbota

이것은 서버 측 지원을 사용하지 않는 페이지에 대해서는 맞지만 지정된 .Net과 관련하여 올바르지 않습니다. 올바른 방법은 Response.Redirect를 사용하는 것입니다.
— 힐 힐리

394

내 사용자 컨트롤에서 데이터를 업데이트 한 후 다음을 수행합니다.

  Response.Redirect(Request.RawUrl);    

이렇게하면 페이지가 다시로드되고 사용자 정의 컨트롤에서 정상적으로 작동합니다. RawURL을 사용 Request.Url.AbsoluteUri하고 요청에 포함될 수있는 GET 매개 변수를 유지 하지 마십시오 .

__doPostBack포스트 백을 수행 할 때 많은 aspx 페이지가 다르게 동작하므로 :을 사용하고 싶지 않을 수 있습니다 .


4
@ chris Response.Redirect (Request.RawUrl, false)로 두 번째 매개 변수를 사용 하시겠습니까? 분명히 reponse.redirect를 사용할 때 가장 좋은 방법입니다. 어떻게 생각해?
— aleafonso 2012

@ aleafonso : 나는 개인적으로 두 번째 매개 변수를 사용한 적이 없으며 결과적으로 아무런 문제가 없었으므로 그것이 무엇을 사는지 잘 모르겠습니다. 그러나 그렇습니다. 문서에 따르면 두 번째 매개 변수를 사용해야하지만 CompleteRequest를 호출 할 때만 신경 쓰지 않습니다.
— chris

때로는 현재 페이지에 Id 매개 변수가있을 때 AbsoluteUri가 필요할 수 있습니다 (예 : stackoverflow의 questionId). 아니면 내가 틀렸어?
— CularBytes

2
@aleafonso가 맞습니다. 때로는 디자인 계획이 좋지 않은 것을 나타내는 페이지의 모든 처리를 중단 해야하는 경우가 아니라면 두 번째 매개 변수로 false를 전달해야합니다. 두 번째 매개 변수를 전달하지 않거나 true를 전달하면 HttpException이 발생하고 성능에 영향을 미치고 이벤트 로그를 채울 수 있습니다.
— Ripside

45

늦었을 수도 있지만 답변을 찾는 사람에게 도움이되기를 바랍니다.

다음 행을 사용하여이를 수행 할 수 있습니다.

Server.TransferRequest(Request.Url.AbsolutePath, false);

Response.Redirect프로세스의 단계가 증가하므로 사용하지 마십시오 . 실제로하는 것은 :

  1. 리디렉션 헤더가있는 페이지를 다시 보냅니다.
  2. 브라우저가 도착 URL로 리디렉션됩니다.

보시다시피, 동일한 결과에는 1 회가 아닌 2 회가 소요됩니다.


2
Server.Transfer ()가 Response.Redirect ()보다 더 효율적인 방법임을 지적한 +1
— Jenny O'Reilly

Response.Redirect가 올바르게 작동하지 않는 경우에 효과적입니다.
— Ed Bayiates 18

나는이 설정 예, 페이지의 상태를 취소하지 않는 것으로 나타났습니다 .TextA의 TextBox또는 .Visible의 상태를 Button.
— 클라우드

38

이 시도:

Response.Redirect(Request.Url.AbsoluteUri);

1
페이지 대신 리디렉션 페이지를 전송하여 실제 페이지를 얻지 못할 때 브라우저가 중지되는 루프를 발생시킵니다 ...
— Guffa

2
@Guffa는 리디렉션이 사용되는 컨텍스트에 따라 다릅니다. 동작 또는 조건에 따라 특별히 호출되는 동작 / 코드 블록에서 사용되는 경우 반복 할 때마다 한 번만 올바르게 격리 된 경우에만 실행됩니다.
— 힐 힐리

리디렉션 후 세션 데이터가 손실 될 수 있습니다. 세션을 엉망으로 만드는 정규화 된 URL에 대한 것이 있습니다.
— Chris Cudmore

13

javascript의 location.reload () 메소드를 사용하십시오 .

<script type="text/javascript">
  function reloadPage()
  {
    window.location.reload()
  }
</script>

8

asp.net에서 페이지를 새로 고치는 다양한 방법이 있습니다 ...

자바 스크립트

 function reloadPage()
 {
     window.location.reload()
 }

뒤에 코드

Response.Redirect(Request.RawUrl)

메타 태그

<meta http-equiv="refresh" content="600"></meta>

페이지 리디렉션

Response.Redirect("~/default.aspx"); // Or whatever your page url

6

전체 페이지를 새로 고치지 않으려면 UpdatePanel 내부에서 새로 고칠 내용을 래핑 한 다음 비동기 포스트 백을 수행하는 것이 어떻습니까?


3

개인적으로 페이지의 상태를 유지해야하므로 모든 텍스트 상자와 기타 입력 필드가 값을 유지합니다. 메타 새로 고침을 수행하면 새 게시물과 같습니다. IsPostBack은 항상 false이므로 모든 컨트롤이 다시 초기화 된 상태입니다. 상태를 유지하려면 이것을 Page_Load () 끝에 놓으십시오. 이벤트가 연결된 butRefresh와 같은 이벤트 butRefresh_Click (...)과 같이 페이지에 숨겨진 버튼을 만듭니다. 이 코드는 사용자가 새로 고침 버튼을 클릭 한 것처럼 포스트 백을 실행하도록 페이지에 타이머를 설정합니다. 모든 상태와 세션이 유지됩니다. 즐겨! (PS 포스트 백에서 오류가 발생하면 @Page 헤더 EnableEventValidation = "false"에 지시문을 넣어야 할 수도 있습니다.

//tell the browser to post back again in 5 seconds while keeping state of all controls
ClientScript.RegisterClientScriptBlock(this.GetType(), "refresh", "<script>setTimeout(function(){ " + ClientScript.GetPostBackClientHyperlink(butRefresh, "refresh") + " },5000);</script>");

2

당신은 그렇게 할 수 없습니다. 리디렉션 (또는 다른 서버 기술)을 사용하는 경우 실제 페이지를 브라우저로 보내지 않고 리디렉션 페이지 만 보냅니다.

이 작업을 수행하려면 메타 태그 또는 JavaScript를 사용해야하므로 잠시 동안 페이지가 표시된 후 페이지를 다시로드 할 수 있습니다.

ScriptManager.RegisterStartupScript(this, GetType(), "refresh", "window.setTimeout('window.location.reload(true);',5000);", true);

2

에 다음 page_load을 추가하십시오.

Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;

1
Response.Write("<script>window.opener.location.href = window.opener.location.href </script>");

1

이 문제를 해결하기 위해 두 가지 방법을 사용할 수 있습니다. 1) 헤드 태그 후

<head> 
<meta http-equiv="refresh" content="600">
</head>

2) 페이지에 헤드 태그가 없으면 Javascript를 사용하여 구현해야합니다.

<script type="text/javascript">
  function RefreshPage()
  {
    window.location.reload()
  }
</script>

내 연락처 :

http://gola.vn


1

페이지 새로 고침을 수행 할 수있는 유일한 올바른 방법은 JavaScript를 사용하는 것이 었습니다.

Response.Write("<script type='text/javascript'> setTimeout('location.reload(true); ', timeout);</script>");

위의 코드를 버튼 클릭 이벤트 또는 페이지 새로 고침을 원하는 곳에 두십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.