2009-07-08 17 views
0

私はASP.NET MVCアプリケーションを持っています。私は、ユニークな要素IDとして使用するために自動インクリメントされた値を生成するというアイデアが出てきました。問題は、リクエスト(ページ生成)の期間中そこにあるはずのグローバル変数をどうやって使うことができますか?要求の期間中静的な値を格納する必要があります。どうやって?

私はこの共有変数にTempDataを使用し、ページが終了したときにこのキーを削除することを考えました。しかし、その後、このTempDataキーをパージするコードはどこですか?明らかに、ページが既にレンダリングされている最後の部分でなければなりません。

いずれの入力も高く評価されます。

EDIT:さまざまなビューや部分的なビューから呼び出せるHTMLヘルパーが多数あるため、ページ上に変数を宣言して各ヘルパーに渡すことは明らかに良い解決策ではありません。私はちょうどヘルパーを使い、彼らがすべて舞台裏でユニークなIDを得ていることを知りたい。

+0

asp.net MVC(webformsのPage.Requestに似ています)にHttpRequestオブジェクトがありませんか? –

+0

はい、あります。何を指示してるんですか? – User

+0

リクエストオブジェクトに保存することはできません(既にプリセットされているキー名と重複しないように注意してください)。リクエスト["keyName"] =値 –

答えて

0

数値を保存するだけであれば、ライフスタイルを管理するために必要なリソースは、1つの静的整数を持ち、常に再利用することよりもはるかに多くなります。

リクエストごとにキーを削除しないでください。静的(私はこれが視覚的な基本で共有されていると思います)の整数を使用し、ユニークな値が必要なたびにインクリメントします。また、一度のリクエストで再利用されないことを確実にするために、その度に奇妙なほど高い数値でmodを使用してください。オーバーフローすることはありません。

+0

は、サイトのすべてのユーザーが共有することを意味します。さらに質問を読んで、私は彼が望んでいるとは思わない。 –

+0

私が読んだところから、彼が望むのは要素idのユニークな番号です。数値が共有されているかどうかは関係ありません(この場合、1つの変数は共有されていますが、それから取得された値は確実に一意になります)。 –

0

なぜ整数変数をページビューファイルの先頭に定義しないのですか? ビューレンダリングの実行中にそれを使用し、最後にそのまま放置することができます。明示的に何かを破壊する必要はありません。あなたの変数は、リクエストの間のみ有効です。 IISは、ステートレスサービスです(Session、Cache、Application変数を減算すると)ので、実際には何も明示的に覚えていません。

+0

この変数を各メソッドおよび部分的なビューに明示的に渡さない限り、ビューにアクセスできないヘルパー・メソッドがあります。私は本当にそれぞれのすべての呼び出しに1つ以上のパラメータを追加したくありません。 – User

+0

Fair。余分な説明をありがとう。 –

0

あなたはglobal.asax.csのApplication_BeginRequestメソッドとApplication_EndRequestメソッドを使うことができると思います。注:現在、メソッド名をダブルチェックすることはできませんが、近いと思います。

0

あなたがリクエストごとに再生成されるだろう、あなたのコントローラ内のメンバ変数を作成することができます。

public class ItemController : Controller 
{ 

    private int _UniqueID = 0; 

    public ActionResult Index() 
    { 
     foreach (var item in items) 
     { 
       item.UniqueID = _UniqueID++; 
     } 
     // etc... 
    } 
+0

コントローラはあなたの見解に何もしません。ビューデータを提供するだけで、ビューのコントロール/ htmlを操作することはできません(また、できません).WebフォームのようにMVCにコントロールがないためです。 –

+0

それは正しいです - 私はちょうど彼のコントロールのそれぞれがいくつかの個々のデータ項目に基づいて生成されていると仮定しています。私は、Viewが明示的に渡されたものを表示する以外に、Viewが何かを行う(状態のトラッキング、ユニークなIDの作成など)という考えには賛成していません。 –

1

さて、私は少しグーグルとASP.NETフォーラムで解決策を発見しました。明らかに

http://forums.asp.net/t/1401685.aspx

、私は、要求の期間中、私の小さな静的変数を持っているHttpContext.Current.Itemsコレクションを使用することができます。

+0

この変数をビューレンダリングの実行順序の外に使用する必要がありますか?もしそうでなければ、私は本当になぜこのコレクションを使用して気にしません。 –

+0

これ以外に何を使うことができますか? – User

関連する問題