6

Asp.net 2.0 を使用しています。ページ1server.transferからページ 2 へ移動します。URL はページ 1 のままです。ここで、ページ 2 のリンクをクリックすると、ページ 3 に移動します。したがって、URL はページ 1 のままにする必要があります。代わりに、ブラウザにはページの URL が表示されます。 2. それは予期された動作ですか?

私は実際に URL からパラメーターを隠そうとしていました。

  1. response.redirectここから前のページにアクセスできないので使えません。
  2. PostBackUrl を使用してみましたが、現在のページにデータを保存し、エラーが発生しなければ次のページを表示する必要があるため、うまくいきません。データが間違っていたり、エラーがあったりした場合は、ユーザーに同じページを表示する必要があります。
  3. 今、server.transferを試してみようと思ったのですが、前のページのURLが表示されています。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

2

これは予期される動作です。

Server.TransferASP.NETを使用するThreadAbortExceptionと、元の要求の処理が停止し、すぐに同じスレッドで新しい要求の処理が開始されます。新しいリクエストが実行され、その出力がブラウザに送信されます。ブラウザは について何も知りませんServer.Transfer。ブラウザが知っているのは、ページ 1 を要求し、サーバーが何らかのコンテンツをブラウザに送り返したことだけです。これは開発者としては実際にはページ 2 からのものです。

ポストバックは、非表示にすることを意図した場合、ページ 2 の URL が漏れる場所です。page2 コンテンツがポストバックを処理するには、page2 にポストバックする必要があります。それが page1 にポストバックされた場合、これらは実際には page2 によって生成されるため、page1 は viewstate および form イベントをどう処理するかわかりません。これを実現するために、<form>page2 によって提供される要素にはactionof がありpage2ます。の後にブラウザで html ソースを見ると、次のように表示されServer.Transferます。

<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm">

従来の Web フォームを使用してユーザーから URL を完全に隠す唯一の実際の方法は、ポストバックを使用せず、ページ 2 のすべてのリンクを実際にページ 1 にリンクし、すべてのロジックをページ 1 に追加して適切に処理することです。

または、ポストバックをまったく使用できませんでした。ajax を介してすべてのアクションを実行した場合、ブラウザの URL はまったく変更されず、とにかくユーザーにとってより良いエクスペリエンスを得ることができるはずです。

さらに良いのは、ASP.NET MVC を使用することです。これにより、ユーザーが非常に理解しやすく、内部でより複雑なパラメーターにマップできるフレンドリーな REST のような URL にプッシュされます。

于 2012-08-09T03:57:50.757 に答える