2009-08-17 11 views
10

私はActionLinkを呼び出して、私のpublic ActionResultを呼び出します。それは呼び出されたページに戻りますが、どうしたらいいですか?ActionResult呼び出されたページに戻ります

+0

あなたの質問はあまり明確ではありません。デフォルトでは、最も簡単なActionLinkコンストラクタは、リンクの作成時にビューを処理したコントローラと同じコントローラを使用します。ブラウザページが変わらないように、Ajaxスタイルの呼び出しをしたいのですか? – womp

答えて

24

これにはいくつかのテクニックがあります。

最も簡単なのは...

return Redirect(HttpContext.Request.UrlReferrer.AbsoluteUri); 

absoluteURIでは、あなたが探している正確なパスを与えないかもしれないが、UrlReferrerは、あなたが探しているimformationを持つ必要があります。 RedirectはActionResultのサブクラスを返します。したがって、有効な戻り値です。

もう1つのアイデアは、リダイレクトされた場所を格納された値に基づいて設定することです。これは、フォームを検証し、最初の応答で検証の問題を示すときなど、リダイレクトする前に複数の要求を行う場合に便利です。別の状況は、参照元がローカルサイトでない場合です。どちらの場合でも、あなたのリファラーはあなたが望むものではなく、どこか他の場所から正しい場所を取得する必要があります。

具体的な実装には、フォーム上の隠れた入力フィールド、セッション状態、ルートデータからのdescriminator値の引き出し、さらにはHttpContext.Request.ApplicationPathのようなもっと一定の値の使用が含まれます。

幸運。

+0

私はページ 'A'にいます、そこからページ 'B'にナビゲートします。 ページ 'B'を更新します。 この場合、Request.UrlReferrerは 'B'を返しますが、私は 'A'を期待しています。 ヘルプがありますか? –

0

Webの状態が不明なため、ActionResultは、User-Agentが要求したURLだけではなく、ActionLinkから "呼び出され"ません。このため

は、そのユーザーから来ていたどこで知ることができる唯一の真の「組み込み」の方法は、参照ページが何であったか確認するためにHTTPリクエストヘッダを調べることである:

string referrer = Request.Headers["referer"]; 

ます」あなたが直接呼び出すつもりなら、このurlからActionメソッドを解析する責任があります。このリファラーはあなた自身のサイト内のリンクではないかもしれないことに注意してください。