2012-04-18 5 views
1

다음을 수행하려고합니다. - 처리기에서 함수 JQuery를 호출합니다. - 처리가 완료되면 페이지로 리디렉션합니다.처리기에서 리디렉션 처리기가 작동하지 않습니다.

문제는 페이지가로드되지 않는 것입니다.

가장 명확하게하기 위해 다음 코드를 작성했습니다.

/// <summary> 
/// Summary description for MyFunction 
/// </summary> 
public class MyFunction : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/plain"; 
     context.Response.Write(context.Request["HelloWorld"]); 
     context.Response.Redirect("~/Login/WebForm1.aspx"); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

그것은 내 페이지 "로그인/WebForm1.aspx를"이라고해야하지만, 그것은 아무것도를 호출하지 :

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
<script type="text/javascript" src="js/jquery-ui.js"></script> 
<script type="text/javascript" src="js/jquery.js""></script> 
</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <script type="text/javascript" language="javascript"> 
function CallHandler() { 
     console.info("Entering CallHandler"); 
     $.ajax({ 
      type: 'POST', 
      url: "Handlers/MyFunction.ashx", 
      data: { helloworld: 'hello world'}, 
      success: function (data) { 
       console.info(data); 
       } 
      }); 
     } 

    </script> 
<asp:HyperLink runat="server" ID="linkForTest" onclick='CallHandler();' Text='Click Me'  />    
</asp:Content> 

내 핸들러는 다음과 같다. 그러나 Firebug는 문제를 찾지 못하는 것 같습니다 ... 그냥 페이지를로드하려고 계속합니다 ... 실패했습니다.

아이디어가 있으십니까?

답변

0

루핑 중입니까?

페이지가 리디렉션되는 경우에도 리디렉션됩니까?

어쩌면 당신은 당신은 핸들러 helloworld을 전달하고 그 null 참조 오류가 어떤지를 확인 HelloWorld로 읽는

+0

해당 루핑 예. request.Url이 정확합니다. 동료는 호출 페이지에서가 아니라 처리기에서 페이지의 리다이렉션을하려고한다는 사실 때문에 문제가 발생한다고 말했습니다. – PetersLast

+0

그래서 리디렉션하려는 페이지에 이미있는 경우 리디렉션 if (! request.Url.EndsWith ("Login/WebForm1.aspx"))를 호출하지 마십시오. context.Response.Redirect ("~/Login /WebForm1.aspx "); –

+0

이 페이지에 없습니다. 저는 실제로 페이지에 있습니다 : "~/Default/Default.aspx"그리고 "~/Login/Login.aspx"에 가고 싶습니다. – PetersLast

0

를 리디렉션하기 전에 context.Request.Url을 확인해야합니까? 또한 $ .ajax 호출에서 오류 처리기를 사용하고 오류가 발생하는지 확인하십시오.

console.info("Entering CallHandler"); 
    $.ajax({ 
     type: 'POST', 
     url: "Handlers/MyFunction.ashx", 
     data: { HelloWorld: 'hello world'}, 
     success: function (data) { 
      console.info(data); 
      }, 
     error: function (data) { 
      console.error(data); 
      } 
     }); 
    } 
+0

null 참조가 없습니다. 그리고 응용 프로그램은 결코 console.info, 성공 또는 오류를 거치지 않을 것입니다 ... 왜냐하면 리다이렉트 때문에 ... – PetersLast

+0

"Hello World"를 작성한 다음 요청을 리디렉션하는 목적을 얻지 못했습니다. 리디렉션을 시도하고 있습니까? 로그인 페이지에 사용자? 그렇다면 "인증되지 않은"것으로 응답해야하며 로그인 할 위치가 javascript로 설정되어 있어야합니다 (location.href). 만약 당신이 동적으로 로그인 폼을 div 나 뭔가에로드하려고한다면, 당신은'Response.Redirect' 대신'Server.Transfer'를 시도 할 수 있습니다. –

+0

Hello world는 단지 내 코드의 한 예일뿐입니다. 쓰는 방법은 아무런 문제없이 데이터를 전송하는 것입니다. 내 페이지에서 실제로하고있는 일은 Facebook 계정을 통해 사용자를 등록하는 것이며, 로그인 한 사용자는 회원이 아닌 경우 실제로 액세스 할 수없는 기본 페이지로 리디렉션됩니다. 그러나 나는 간단한 예제를 원했고, 내가이 예제를 쓴 이유입니다. – PetersLast

1

아약스 요청에 대한 리다이렉트는 호스트 페이지를 리디렉션하지 않을 것이라고 확신합니다. 이를 처리 할 수있는 몇 가지 방법이 있습니다. 한 가지 방법은 핸들러에서 일종의 알림 또는 상태 코드에 대한 응답으로 클라이언트 측 리디렉션을 수행 할 수 있다는 것입니다.

+0

내가 발견 한 해결책은 (더 나은 방법이 있다고 생각하는) 좋은 페이지로 리디렉션되는 Javascript 페이지의 확인 인 값 (Json을 통해)을 반환하는 것입니다. ~/Login/login.aspx). 그것은 내가 진절머리 난 코드라고 생각하지만, 작동 중입니다 ... – PetersLast

0

리디렉션하는 경우 리디렉션하려는 페이지의 콘텐츠가 아약스 결과로 전달됩니다.

관련 문제