2017-04-18 7 views
5

私はRedirectToActionを知っていたので、URLをユーザーのために安定した状態に保ち、あるアクションから別のアクションに責任を引き継ぐようなものを探していました。"RewriteToAction"のようなものがありますか?

このトピックではzero Google resultsが見つかりましたので、私は完全にXY problemを解決しようとしている可能性があります。

まだ、私はなぜこれが必要かと思う理由を説明しようとします。

シナリオ:上記のコードで

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 

    // This compiles. 
    return RedirectToAction("B", new { uniqueID }); 

    // This does not compile. 
    return RewriteToAction("B", new { uniqueID }); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

、アクションAは、整数からGUIDを計算し、別のアクションに渡します。

回避策:私はこのような何かに上記のコードを変更することができ

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 
    var model = DoCreateModelForUnique(uniqueID); 

    return View("B", model); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

予想通りこれが働くだろう。

さらに複雑なシナリオでは、私はいつでも使用するために「サーバー側リダイレクト」(別名書き換え)をしたいと考えています。

代替回避策:

私はまた、例えば、HttpContext.RewritePathを使用することができますGlobal.asaxのApplication_BeginRequestの中に書き直しをしてください。

これは、期待通りに機能していても、「MVCコンテキスト外」と感じます。

私の質問:

RewriteToActionのようなものをやってのエレガントな、MVC-統合方法はありますか?

アップデート1:

Luke commented有望リンク:

How to simulate Server.Transfer in ASP.NET MVC?

私は、これは私のニーズに合うかどうか、検討してみましょう。

+2

これはあなたの要件を満たすとは思わない? http://stackoverflow.com/a/1180744/894792またはhttp://stackoverflow.com/a/1242525/894792 – Luke

+0

それは非常に有望に見える、@ルーク、私は見てみましょう、ありがとうたくさん。 –

+1

幸運な私の友人! :o) – Luke

答えて

2

どの程度

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 

    return B(uniqueID); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

+0

アクションメソッドを呼び出すだけです。それはきれいに見える。ありがとうございました! –

+1

ようこそ。それがあなたのために働くなら、答えを受け入れることができますか?ありがとうございます –

+0

確かに!私は別のフィードバックを得るために数日待つことを試みます。 –

関連する問題