2009-05-27 17 views
2

リダイレクトを実行するときに渡す必要がある値があります。私はこれを達成するためにTempDataを使用したいが、問題に遭遇した。ASP.NET MVC:複数のリクエストにわたってTempDataを保持

私は動的なJavaScriptを生成するために特別なコントローラを使用します。たとえば、次のようなスクリプトタグがあります。

<script type="text/javascript" src="/Resource/Script/Login.js"></script> 

...スクリプトファイル「Login.js」はありません。代わりに、ResourceControllerのスクリプトアクションが呼び出されている:

public class ResourceController : Controller { 
    public ActionResult Script(string id) { 
     // set script = some code 
     return JavaScript(script); 
    } 
} 

問題があるが、これは私が動的なスクリプトを使ってページからリダイレクトするためにTempDataを使用しないことを意味し、次のリクエストを食べます。スクリプトアクション(またはResourceController全体)がTempDataを消費しないように選択でき、次の「実際の」リクエストに使用できるようにする方法はありますか?

ありがとうございます!

+1

中)(キープ導入の根拠をしてください読んで、あなたはTempDataを設定し、(RedirectToActionを呼び出して表示するコードサンプル。 –

答えて

3

セッションは複数の要求間で保持されます。

+2

合意しました - あなたがそれをしたい場合は、TempDataのポイントがありません – joshcomley

5

あなたはビューでTempDataを使用した後のライン

<script type="text/javascript" src="/Resource/Script/Login.js"></script> 

を置くことができます。

また、この記事では、あなたのための役に立つかもしれない:ASP.NET MVC TempData Is Really RedirectData

+1

私は間違いなくその記事もお勧めします! – joshcomley

+1

その記事は便利です – aleemb

2

あなたのコントローラはTempDataををクリアしExecuteCoreをオーバーライドスーパータイプ持っています。私はこれがいいアイデアだと言っているわけではありません...

0

あなたのスクリプトアクションを飾ることができるPreserveTempDataAttributeを作成してみませんか? nullでない場合は、TempDataを再割り当てできます。

8

Asp.Netチームは、すべてのTempDataを項目が1つの以上の要求のために生きるためにタグ付けされているを確認しますTempData.Keep()を導入することによって、MVC 2で、この痛みを取り除きます。 ではなく、でTempDataを食べることができます。

Jacques Eloffs blog post

Keep() in MSDN docs

関連する問題