U Scotta Mitchela jsem se právě dozvěděl, že ASP.NET 2.0 obsahuje vážnou chybu v často používaných controlech GridView, DetailsView a FormView.
Podmínky jsou následující:
- ViewState je vypnuté (
EnableViewState = false
) - Na stránku přistupují dva uživatelé a oba vykonávají mazání nebo editaci záznamu
Problémová situace vypadá následovně:
- Alice i Bob přistoupí na stránku, která zobrazuje záznamy 1 až 10.
- Alice smaže záznam 1, Bob si nadále prohlíží původní načtenou stránku (všech 10 záznamů)
- Bob se rozhodne smazat záznam 1 – ten už je mezitím smazaný Alicí a díky chybě ASP.NET dojde ke smazání záznamu 2.
Tato chyba je tedy velmi kritická, protože jednak může vést ke smazání nezamýšleného záznamu, a zadruhé má Bob mnoho času na to, aby chybu vyvolal (nemusí se s Alicí trefit do několika milisekund, jak tomu u podobných problémů bývá).
Řešením je povolit ViewState nebo si trochu pohrát s událostmi RowCommand a Deleting (podrobnosti viz Scottův článek)
Je to první vážná chyba, se kterou jsem se u ASP.NET setkal, a nutno říct, že se jedná o opravdu těžký kalibr. Upozorněte, prosím, své známé ASP.NET vývojáře!
Zajímavý článek.