2017-07-17 6 views
-4

私はasp net Webフォームを持っており、ボタンをクリックしたときにノートを作成する必要があります。 情報を保存するときに最後にクリックされたボタンを知る必要があります。 例 - 誰かが「新規エントリを作成」ボタンをクリックする - static bool newflag= true削除のケース - static bool delflag= trueになります。イベントのマーキングには何が使えますか?

しかし、私はすべてのプログラムでそれを制御する必要があります - それが真実であるか偽であるか、そして私が約4つのフラグを持っているとき、それは困難です。
誰かが別の方法を知っているかもしれません。
C#ASP.NET Webフォーム

+6

「静的」は、ASP.NETでは悪い考えです。すべてのユーザーが同じフラグを共有します。「削除」をクリックすると、他のすべてのユーザーも「削除」とマークされます。代わりに 'Session'を使うことができます。 –

+0

あなたの質問を理解することは難しいです、あなたはそれをより整理してください。 –

+1

@АндрейГолубцовURLにIDを持つことで、その静的変数が各ユーザーに一意になることはありません。 – Servy

答えて

1

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; 
} 
関連する問題