2009-04-08 3 views
2

여러 ASPX 코드 숨김 파일에서 조건을 테스트해야하며 경우에 따라 정상적인 페이지로드 프로세스를 완전히 무시하여 해당 ASPX 페이지가로드되지 않도록하고 싶습니다. Intead, 코드 숨김 메소드로 작성된 브라우저에 사용자 정의 응답을 보내고 싶습니다.ASPX 양식을로드하지 못하도록 ASP.NET에서 페이지로드 수명주기를 재정의하려면 어떻게합니까?

정상적인 ASPX 페이지 콘텐츠가 표시되지 않은 상태에서 페이지 라이프 사이클의 어떤 방법을 무시할 것인지, 내 맞춤 Response.Write가 브라우저에 전송되도록하는 가장 좋은 방법을 아는 사람이 있습니까?

감사합니다.

답변

7

아마도 가장 쉬운 방법은 Page_Load()입니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    bool customResponse = true; 
    if (customResponse) 
    { 
     Response.Write("I am sending a custom response"); 
     Response.End(); //this is what keeps it from continuing on... 
    } 
} 
+1

Response.Clear도 도움이 될 것입니다. –

0

실제로 응답하는 대상은 게시 된 양식 필드, 인증 정보 등입니다 ...? Page_Load를 사용하여 표시된 방법이 작동하지만 페이지 수명주기 전에 해당 시점까지 실행됩니다.

6

"쉬운"방법은 Response.End()가 성능에 좋지 않아 스레드를 종료하는 예외를 throw하는 것입니다. http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx
http://weblogs.asp.net/hajan/archive/2010/09/26/why-not-to-use-httpresponse-close-and-httpresponse-end.aspx


나는 같은 질문을했고 이런 식으로 해결했다. 이것은 2 단계 프로세스입니다. 먼저 HttpApplication.CompleteRequest()를 호출하고 처리를 종료하십시오. 그런 다음 Render()를 재정 의하여 기본 메서드가 호출되지 않도록합니다. 예제 코드는 다음과 같습니다.

bool customResponse = true; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (customResponse) 
    { 
     Response.Write("I am sending a custom response"); 
     this.Context.ApplicationInstance.CompleteRequest(); 
     return; // Bypass normal processing. 
    } 
    // Normal processing... 
} 

protected override void Render(HtmlTextWriter writer) 
{ 
    if (!customResponse) 
     base.Render(writer);  // Then write the page as usual. 
}