2017-07-17 27 views
-4

我有一個asp網絡Web表單,當點擊按鈕時我需要做筆記。 我需要知道當我保存信息時最後點擊了哪個按鈕。 例如 - 有人點擊按鈕「創建新條目」 - 我會做static bool newflag= true。我刪除的情況下 - static bool delflag= true我可以使用什麼來標記事件?

但是我需要在所有程序中控制它 - 當它是真的或當它是假的,當我有大約4個標誌時,它是困難的。
也許有人知道另一種方式,我該如何做到這一點?
C#ASP.NET Web表單

+6

'static'在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; 
} 
相關問題