2011-08-11 48 views
1

私は、この変数を私のビューのフォームからPOST経由でコントローラにプッシュします。コントローラMVC内のグローバル変数

次に変数をビューデータにプッシュして、次のビューで使用できるようにします。しかし、そのビューにはフォームが必要ないので、同じ変数を次のコントローラにプッシュすることはできません。一言で言えば、コントローラからの情報を前後にプッシュするのは面倒ですので、グローバル変数をコントローラ内に保持して、すべてのアクション結果でアクセスできるようにする方法を探しています...一般私のプログラムの内訳は、この...

-User types a "name" 

-I send "name" to controller. 
-I push 'name' into viewstate (query entity framework to get a list of stuff 'name' 
    has access to) and return that list into the view. 
-In that view I can access the 'name' since it was in view state. 
-Clicking on a link inside the page takes me to another controller where I need 
    to get access to 'name' WITHOUT passing view Routing or POST. 

明らかに最も簡単な方法は、グローバルの「name」を宣言するだろうし、それは常に利用可能だが、私の人生のために、私はどのように把握することはできません。

答えて

8

Sessionに保存すると考えましたか?

これにより、コントローラまたはビューから簡単にアクセスでき、グローバル変数が不要になります。

保管:

[HttpPost] 
public ActionResult YourPostMethod(string name) 
{ 
    Session["Name"] = "yourName"; 
} 

はアクセス:*

それは前にそれをつかむに存在していることを確認してください:

var whatsMyName = (Session["Name"] != null) ? Session["Name"] : ""; 

スケーラビリティを考慮

MVCアプリケーションはWebを模倣するように設計されており、ステートレスです。セッション変数を導入するとこれが変更されるので、スケーラビリティなどに関する問題が発生する可能性があることに注意してください。

セッション内にデータを格納する各ユーザーは、サーバーレベルでリソースを消費します。ユーザー数とセッション内の格納内容によっては、値が大きくなりすぎるとメモリが不足する可能性があります。

0

クライアントが接続されている間に連想配列であるセッションオブジェクトを使用してみませんか?

1
$_SESSION['name'] = "zzzz"; // store session data 
name = $_SESSION['name']; //retrieve data 

そのセッションがアクティブになるまであなたは、各ユーザーのためにこれを使用することができます...がこのhttp://www.tizag.com/phpT/phpsessions.phpため

+0

を役に立てば幸い – Baz1nga