0

ログイン資格情報を確認した後、response.redirect を呼び出しています。これはすべて .net Framework 3.5 で正常に動作しますが、.net 4.5 にアップグレードしても何も起こりません。同じページにとどまります。

私はさまざまな置換を試しました

System.Web.HttpContext.Current.Response.Redirect("/");
System.Web.HttpContext.Current.Response.Redirect("/", false);
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();

何も機能していないようです。try キャッチを配置しましたが、false を使用しても例外は発生しません。

コードは asp:button onClick イベントから呼び出されています。クリックイベント中に、資格情報が正しいかどうかを確認し、ログイン設定セッション変数を実行して、役割に適したランディングページにリダイレクトします。

詳細情報 問題を基本的なシナリオに要約しました。次のシナリオでは、両方のボタンが Response.redirect を呼び出す同じ関数 btnTemp_Click を呼び出します。asp:button の場合は機能しますが、HTML5 ボタンの場合は機能しません。どちらの場合も、response.redirect のブレークポイントが実行されます。

<asp:Button ID="btnTemp" Text="Test Redirect" runat="server" OnClick="btnTemp_Click" />
<button id="btnTmp2" runat="server" onserverclick="btnTemp_Click" >button to Redirect</button>

protected void btnTemp_Click(object sender, EventArgs e)
{
        HttpContext.Current.Response.Redirect("http://www.google.com", false);
}

asp:buttonが機能しなくなったボタンをクリックした後の奇妙な何か

まったく新しい Web アプリケーションを作成し、その中にこれらの 2 つのボタンしかない場合、両方で機能します。したがって、onserverclick がヒットするが、onclick がヒットしない場所で何かを実行しているコードが必要です。

4

2 に答える 2

0

ここでJames Johnsonの回答を使用して解決しました

問題は基本的に、更新パネル内にいて、コントロールがポストバック トリガーとして明確に登録されていない場合、非同期ポストバックをリダイレクトしようとしていることです。

そのため、コントロールをポストバック トリガーとして明示的に登録する必要があります。

ジェームズ 書きました:

UpdatePanel を使用していると仮定して、次の ScriptModule を web.config に追加します。

<httpModules>
   <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules> 

他のオプションは、リダイレクトを行うコントロールをポストバック コントロールとして登録することです。UpdatePanel を使用すると、PostBackTrigger を追加することでこれを行うことができます。スクリプト マネージャーを使用することもできます。

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Button1);

最初の解決策を機能させることができませんでした (少なくともデバッグ モードでは)。

于 2013-11-01T16:44:06.003 に答える
0

これがあなたの問題に対する具体的な答えかどうかはわかりませんが、迂回して解決する可能性があり、誰かが頭を悩ませる時間を大幅に節約できます。

MS AjaxポップアップでNullReferenceExceptionの問題がありました。具体的には、ポップアップを閉じるをクリックするとサーバーに戻り、サーバー側のコードが別のページにリダイレクトされますが、このエラーが発生していました。

スタック トレースを見ると、ScriptModule.HttpResponse_Redirecting メソッドで例外自体がスローされていることがわかりました。

Google では何も役に立たず、DotPeek を調べても問題はわかりませんでした。

次に、VS 2010 で .NET Framework コードのシンボルを実際にロードできることがわかったので、これを行いました ([ツール] -> [オプション] -> [.NET Framework ソースのステッピングを有効にする])。

その理由は、ボタンのクリックが (ポストバックではなく) コールバックとして扱われていたためであることが判明しました。 true)、および内部的に例外をスローしました。

これはキャッチされました (またはそのように見えました) が、HttpResponse オブジェクトの RedirectLocation プロパティを内部的に設定する機会を失う前ではありませんでした。

スクリプト モジュールのコードは、この文字列を解析しようとし、null であるという事実を吹き飛ばしました。

したがって、私にとってうまくいった回避策は、Redirect を呼び出す直前に、HttpResponse オブジェクトの RedirectLocation プロパティを明示的に設定することでした。確かに、これは特に優雅なソリューションではありませんが、MS Ajax とは異なります (また、WebForms も同様です! ;) )。

于 2014-01-08T09:54:53.133 に答える