2012-04-18 8 views
1

私は以下を実行しようとしています: - ハンドラで関数JQueryを呼び出します。 - 処理が完了したら、ページにリダイレクトします。context.Response.Redirect from handlerは動作しません

問題は、ページが読み込まれていない可能性があります。

私は明確にするために次のコードを作成しました。

<%@ 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> 

と私のハンドラは、次のようなものです:

/// <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の" 私のページを呼ばなければならないが、それは何を呼び出しません。 しかし、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

私は、ajaxリクエストに対するリダイレクトがホストページをリダイレクトしないと確信しています。これを処理するにはいくつかの方法があります。 1つの方法は、ハンドラからのある種の通知またはステータスコードに応答して、クライアント側でリダイレクトを行うことです。

+0

私が見つけた解決策は、(良い方法があると思いますが)良いページにリダイレクトするJavascriptページによるチェック(〜/ Login/login.aspx )。それは私が思っているコードは馬鹿だが、それは働いている... – PetersLast

0

リダイレクトすると、リダイレクトしたいページのコンテンツがajaxの結果として渡されます。

関連する問題