Statische ASP.NET C # -Variablen sind global?

Heute habe ich eine kleine Beta-Webanwendung von asp.net veröffentlicht, mit der interne Mitarbeiter einige Produktinformationen ändern können. Es gab Probleme, bei denen die Benutzer die Produktinformationen gegenseitig überschrieben ... obwohl jeder Mitarbeiter eine völlig andere Zeile (Produkt) bearbeitete.

Nach einigem Suchen in Google, denke ich, weiß ich, was los ist. Es hat mit der Verwendung statischer Variablen zu tun. Im Folgenden finden Sie ein kurzes Beispiel für das Problem:

// EditProductGroup.aspx.cs
public partial class EditProductGroup : System.Web.UI.Page
{

    private static int _groupId = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
      _groupId = Convert.ToInt16(Request.QueryString["GroupID"]);

     // get existing ProductGroup information from database using 
     //_groupId to find the row and populate textboxes
    }

    private void saveProductGroupData()
    {
      // when user hits 'save changes' button, update row 
      //where the primary key column 'ProductGroupID' matches _groupId in the table
    }
}

Meiner Recherche nach existiert tatsächlich eine statische Variable für die gesamte Anwendung, dh, wenn mehrere Benutzer die Anwendung verwenden, lesen sie tatsächlich alle denselben 'Wert' für '_groupId' und setzen ihn in einigen Fällen auch tatsächlich es auf einen anderen Wert, wodurch eine andere Benutzerinstanz der Seite Daten in der falschen Zeile (ProductGroupId) speichert.

Meine Absicht war, dass die statische Variable von anderen Benutzern isoliert ist und nicht stört - jeder Benutzer hat eine eigene Instanz der Seite, also eine eigene Instanz der Variablen '_groupId'.

Zum Glück fand alles in einer Entwickler- / Staging-Datenbank statt, nicht in der Live-Datenbank. Ich bin nicht sicher, ob ich nur das Schlüsselwort 'static' löschen muss, um zu verhindern, dass die Variable von allen gesetzt / gelesen wird.

Irgendwelche Gedanken? Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage