0

私の Web サイトでは、Web ユーザー コントロールを使用しています。ユーザー コントロールのプロパティが設定され、一連のユーザーに共通になります。たとえば、20 人のユーザーが自分の Web サイトにアクセスしている場合、そのうちの 5 人は id = 1 のユーザー コントロールを使用し、4 人は id =2 のユーザー コントロールを使用している可能性があります。共通IDにアクセスするユーザー間で共有したい各ユーザーコントロールに関連付けられたプロパティがあります。

私は次のことを考えました:

  • id / プロパティ値配列の組み合わせを保存するアプリケーション変数
  • ユーザーコントロールの静的プロパティを作成していますが、IDに関係なく、すべてのユーザー間で値が共有されると感じています。
  • または、データベースに保存する [データベースとのやり取りを減らしたい。]

ご意見をお聞かせください。

4

3 に答える 3

0

あなたのことを正しく理解しているかどうかわかりません。に基づいて特定のアイテムを表示/非表示にしたいとしますid

もしそうなら、次のようにしたらどうでしょうか。

ロード時にコントロールに switch ケースを提供します。をチェックし、id共有したいアイテムの可視性を設定します。

たとえば、idユーザーの役割だとします。それに基づいて、私は次のようにします。

switch (nRoleID)
{ 
    case 1: //Set controls visibility and hide others/
        break;
    case 2: //Do something.
        break; ;
    default: //Hide all
        break;
}

大声で考えているだけです。

于 2010-09-27T08:59:31.640 に答える
0

HTTP はステートレスであるため、最初の 2 つのオプションは機能しないことに注意してください。

最良の代替手段は、複数のユーザーに共通する情報を DB に格納することです。

于 2010-09-27T08:59:51.760 に答える
0

データベースを使用しないことに決めた場合は、アプリケーションが複数のサーバーにスケールアウトする場合、その時点でアーキテクチャを再検討する必要がある場合があることに注意してください。そうしないと、同じ ID に対して別のサーバーで別の情報がコントロールに表示される可能性があります。

それに満足している場合は、情報を ASP.NET キャッシュに保存することを検討してください。

System.Web.Caching.Cache cache = Page.Cache;

List<KeyValuePair<string, object>> controlSetup;

controlSetup = cache.Get("ControlSetup" + this.Id.ToString());

if (controlSetup == null)
{
    // Create the control setup from scratch
    // Put the created control setup into the cache
    cache.Put("ControlSetup" + this.Id.ToString(), controlSetup);
}

foreach (KeyValuePair(string, object) item In controlSetup
{
    // Set the control values
}
于 2010-09-27T08:28:40.370 に答える