static
は、ASP.NETでは悪い考えです。すべてのユーザーが同じフラグを共有します。「削除」をクリックすると、他のすべてのユーザーも「削除」とマークされます。代わりに、セッションを使用することができます。この目的のために作成された特別な型で複数の情報を読み書き可能に保存する場合は、辞書とカスタム列挙型をキーとするカスタムクラスがあります。
キーの列挙:
public enum EntryEventType
{
Undefined = 0,
NewEntry = 1,
DeletedEntry = 2,
// ....
}
イベント情報をカプセル化するクラスとそれが国家と最後に更新された情報です:
public class EntryEvent
{
public EntryEvent(EntryEventType type)
{
EventType = type;
}
public EntryEventType EventType { get; set; }
public bool? Flag { get; private set; }
public DateTime? LastChanged { get; private set; }
public static EntryEvent GetTrue(EntryEventType type)
{
var e = new EntryEvent(type);
e.SetFlag(true);
return e;
}
public static EntryEvent GetFalse(EntryEventType type)
{
var e = new EntryEvent(type);
e.SetFlag(false);
return e;
}
public void SetFlag(bool flag)
{
Flag = flag;
LastChanged = DateTime.Now;
}
}
情報を格納するための辞書をカプセル化するクラスそれぞれのイベントタイプに対して:
public class UserEntryFlags
{
private readonly Dictionary<EntryEventType, EntryEvent> UserEntryFlagDict = new Dictionary<EntryEventType, EntryEvent>();
public UserEntryFlags()
{
UserEntryFlagDict.Add(EntryEventType.NewEntry, new EntryEvent(EntryEventType.NewEntry));
UserEntryFlagDict.Add(EntryEventType.DeletedEntry, null);
// ...
}
public EntryEvent this[EntryEventType type]
{
get
{
return UserEntryFlagDict[type];
}
set
{
UserEntryFlagDict[type] = value;
}
}
}
このクラスのインスタンスは、sessio n:
protected void CreateNewEntry(Object sender, EventArgs e)
{
var entryFlags = Session["UserEntryFlags"] as UserEntryFlags;
if (entryFlags == null) entryFlags = new UserEntryFlags();
entryFlags[EntryEventType.NewEntry] = EntryEvent.GetTrue(EntryEventType.NewEntry);
Session["UserEntryFlags"] = entryFlags;
}
protected void DeleteNewEntry(Object sender, EventArgs e)
{
var entryFlags = Session["UserEntryFlags"] as UserEntryFlags;
if (entryFlags == null) entryFlags = new UserEntryFlags();
entryFlags[EntryEventType.DeletedEntry] = EntryEvent.GetTrue(EntryEventType.DeletedEntry);
Session["UserEntryFlags"] = entryFlags;
}
「静的」は、ASP.NETでは悪い考えです。すべてのユーザーが同じフラグを共有します。「削除」をクリックすると、他のすべてのユーザーも「削除」とマークされます。代わりに 'Session'を使うことができます。 –
あなたの質問を理解することは難しいです、あなたはそれをより整理してください。 –
@АндрейГолубцовURLにIDを持つことで、その静的変数が各ユーザーに一意になることはありません。 – Servy