[C#] Session weg na dubbelklik knop in IE8

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 13:45
Hoi allen,

ik heb op mijn webapplicatie een formulier met daarop wat invoer velden, een customvalidator en een knop verzenden.
Hoe simpel kan het zijn.

Helaas ook een hoop gebruikers die niet snappen hoe je met een formulier omgaat en denken dat je moet dubbelklikken op de knop. Dit gebeurt dus ook veelal en daardoor wordt de validatie 2x (of vaker als ze de knop blijven indrukken) aangeroepen.

In de customvalidator doe ik een null check op een sessie variabele. Het gekke is, is dat in Internet Explorer 8 na de 2e klik de sessie variabele leeg is, waardoor mijn validator false terug geeft.
In IE9, Chrome en FF blijft de variabele keurig gevuld.

Iemand een idee waar dit aan kan liggen?

De validatie is als volgt, waarbij het object _OrderHead de sessie variabele is. Dit object is dus null in IE8 de tweede keer dat hij in de validator komt.
C#:
1
2
3
4
5
e.IsValid = false;
if (_OrderHead != null)
{
    e.IsValid = (_OrderHead.OrderItems.Where(oi => !oi.Deleted).Count() > 0)
}


---edit: opgelost---
in de OnClientClick van de knop werd een javascript functie aangeroepen die dit deed:

JavaScript:
1
$(':button,:submit').attr('disabled', 'disabled'); //disable all buttons and submits


opgelost door middel van:
JavaScript:
1
$(':button,:submit').not('#<%=btnSaveOrder.ClientID %>').attr('disabled', 'disabled'); //disable all buttons and submits


Reden dat deze regel code erin zit, is dat de gebruikers soms heel snel achter elkaar op verschillende knoppen klikken (don't ask why!). Met deze regel schakel je de andere knoppen uit, zodat ze dat niet meer kunnen.

[ Voor 22% gewijzigd door PdeBie op 24-05-2012 11:04 . Reden: oplossing toegevoegd. ]


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 16:33

Haan

dotnetter

Je weet zeker dat _OrderHead in de sessie staat en niet stiekem als local variabele in je code-behind (aangezien je de naamconventie voor lokale variabelen hanteert.. )?

o ja extra gratis tip:
C#:
1
2
3
4
_OrderHead.OrderItems.Where(oi => !oi.Deleted).Count() > 0

// is gelijk aan 
!_OrderHead.OrderItems.Any(oi => oi.Deleted)

[ Voor 33% gewijzigd door Haan op 23-05-2012 14:40 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 13:45
Haan schreef op woensdag 23 mei 2012 @ 14:39:
Je weet zeker dat _OrderHead in de sessie staat en niet stiekem als local variabele in je code-behind (aangezien je de naamconventie voor lokale variabelen hanteert.. )?
C#:
1
private OrderHead _OrderHead { get { return (OrderHead)Session["OrderHead"]; } set { Session["OrderHead"] = value; } }


@extra gratis tip:
dank je. die kende ik nog niet.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Haan schreef op woensdag 23 mei 2012 @ 14:39:
Je weet zeker dat _OrderHead in de sessie staat en niet stiekem als local variabele in je code-behind (aangezien je de naamconventie voor lokale variabelen hanteert.. )?

o ja extra gratis tip:
C#:
1
2
3
4
_OrderHead.OrderItems.Where(oi => !oi.Deleted).Count() > 0

// is gelijk aan 
!_OrderHead.OrderItems.Any(oi => oi.Deleted)
Any draait met een early out. Where gevolgd door Count doet dat niet. In de average case is Any dus meestal beter en niet 'gelijk aan'.

[ Voor 6% gewijzigd door R4gnax op 24-05-2012 10:12 ]


Acties:
  • 0 Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 13:45
oorspronkelijke probleem is trouwens opgelost.

in de OnClientClick van de knop werd een javascript functie aangeroepen die dit deed:

JavaScript:
1
$(':button,:submit').attr('disabled', 'disabled'); //disable all buttons and submits


zucht |:(
soms....................

opgelost door middel van:
JavaScript:
1
$(':button,:submit').not('#<%=btnSaveOrder.ClientID %>').attr('disabled', 'disabled'); //disable all buttons and submits


Reden dat deze regel code erin zit, is dat de gebruikers soms heel snel achter elkaar op verschillende knoppen klikken (don't ask why!). Met deze regel schakel je de andere knoppen uit, zodat ze dat niet meer kunnen.