Toon posts:

[C# / JS] __doPostBack is geen postback?

Pagina: 1
Acties:

Onderwerpen


  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 21:41
OK, vreemde perikelen in mijn huidige applicatie.

Situatie:
Ik heb een knop op mijn formulier 'Button1' en als ik daar op klik gaat er een client event af met daarin de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function Button1_Click(eventTarget, eventArgument) {
        if (typeof (Page_ClientValidate) == 'function') {
            return ValidateGroup('address', '<%=UpdatePanel1.ClientID %>', eventArgument);
        }
        else {
            __doPostBack('<%=UpdatePanel1.ClientID %>', eventArgument);
            return true;
        }
    }

function ValidateGroup(validationgroup, eventTarget, eventArgument) {
        Page_ClientValidate(validationgroup);        
        if (Page_IsValid)
        { 
           alert('hij is valid!');
            __doPostBack('<%=UpdatePanel1.ClientID %>', eventArgument);
        }

        return Page_IsValid;
    }


Als ik op de knop klik en ik zie dat de pagina weer in de 'Page_Load' terecht kom blijkt het geen postback te zijn, maar een normale load waardoor er code word uitgevoerd die niet uitgevoerd mag worden. Dit zie ik doordat ik check of het een postback betreft.

code:
1
2
if (!Page.IsPostBack)
//hele riedel code


Als ik de clientside javascript uitcommentarieer werkt alles wel naar behoren en doet de knop gewoon een postback.
Als ik alerts plaats binnen de javascript, komt de site wel op de juiste plaats in de code terecht. Hij komt namelijk in een alert terecht die ik voor onderstaande regel uit de functie 'ValidateGroup' zet.
code:
1
2
alert('hij is valid!');
__doPostBack('<%=UpdatePanel1.ClientID %>', eventArgument);


Iemand ideeën?

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:05

Haan

dotnetter

Geen direct antwoord op je vraag, maar ik snap niet waarom je voor deze constructie hebt gekozen? De validatie kan toch ook gewoon in de code-behind gedaan worden?

Kater? Eerst water, de rest komt later


  • Compuhair
  • Registratie: September 2009
  • Laatst online: 13:46
Staat UseSubmitBehavior="True" aan, terwijl dit UseSubmitBehavior="False" moet zijn, voor de specifieke control?

Acties:
  • 0Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 21:41
Haan schreef op donderdag 19 mei 2011 @ 17:07:
Geen direct antwoord op je vraag, maar ik snap niet waarom je voor deze constructie hebt gekozen? De validatie kan toch ook gewoon in de code-behind gedaan worden?
Waarom zou je niet client-side valideren?

Het systeem gaat door +/- 1200 gebruikers simultaan gebruikt worden. We willen daarom zoveel mogelijk validatie juist client-side uitvoeren. Dit bevordert o.a. de interactie met de gebruiker.
Uiteraard gebeurt de validatie ook server-side, voor het geval iemand JS uitgeschakeld heeft (al is JS wel een systeem vereiste voor onze applicatie).

@CompuHair: als ik UseSubmitBehaviour op false zet, dan doet de knop geen postback meer. Dit kan hem in de javascript zitten. Dit ga ik onderzoeken.

[Voor 10% gewijzigd door PdeBie op 20-05-2011 09:04]


Acties:
  • 0Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Probeer eerst eens met een sniffing tool te kijken of de browser daadwerkelijk een post uitvoert of niet. Als dat niet het geval is, dan moet je in de Javascript gaan kijken. Word er wel een postback uitgevoerd, dan is het misschien iets serverside's

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 21:41
Hij doet wel een postback zie ik, want hij komt in de Page_Load en IsPostBack is true. De event handler van de knop gaat niet af zie ik.

AutoEventWireUp ofzo waar dit in kan zitten? Hier heb ik niet aangezeten, dus dit zou dan toch default op True moeten staan?

Acties:
  • 0Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is ook logisch dat de event-handler van de knop niet uitgevoerd word, want die word niet als source van de postback gezien.
JavaScript:
1
__doPostBack('<%=UpdatePanel1.ClientID %>', eventArgument)

[Voor 8% gewijzigd door Woy op 20-05-2011 09:27]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 21:41
doh! |:(

Tijd voor koffie denk ik O-)

Acties:
  • 0Henk 'm!

  • PdeBie
  • Registratie: Juni 2004
  • Laatst online: 21:41
opgelost! De laatste tip van Woy was de oplossing.


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Button1_Click(eventTarget, eventArgument) {
    if (typeof (Page_ClientValidate) == 'function') {
        return ValidateGroup('address', eventTarget, eventArgument);
    }
    else {
        __doPostBack(eventTarget, eventArgument);
        return true;
    }
}

function ValidateGroup(validationgroup, eventTarget, eventArgument) {
    Page_ClientValidate(validationgroup);        
    if (Page_IsValid)
    {
        __doPostBack(eventTarget, eventArgument);
    }

    return Page_IsValid;
}


knop:
HTML:
1
<asp:Button ID="Button1" runat="server" Text="Controleer" UseSubmitBehavior="false" CausesValidation="true" OnClientClick="javascript:return Button1_Click(this.name, '')" OnClick="Button1_Click" />


waarbij this.name de juiste eventTarget aangeeft bij de aanroep van de functie.
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee