Ik ben de laatste dagen bezig met jQuery validation. Dat werkt opzich erg mooi, maar geeft mij problemen als ik dat wil gebruiken op een pagina met UpdatePanels. Ik heb een zo simpel mogelijk voorbeeld gemaakt om te laten zien wat voor pagina ik heb:
In de code-behind staat alleen een Thread.Sleep van 2 sec op hetbutton1 click event.
Het gaat hier dus om een content page, met daarop 2 UpdatePanels met bijhorende UpdateProgress. Dit voorbeeld is een beetje gebaseerd op http://www.dotnetcurry.com/ShowArticle.aspx?ID=310 , waarin wordt uitgelegd hoe je jQuery validation icm met ASP.Net masterpages kan gebruiken.
(in werkelijkheid gaat het om een formuliertje waarop wat gegevens ingevuld worden, daarna worden resultaten in een grid getoond die in de tweede updatepanel staat, je kan dan namelijk resultaten selecteren en daarna weer op een knop klikken voor verwerking, daarvoor is updateprogress2)
Maar het probleem is dus, dat de UpdatePanels en jQuery niet heel goed samenwerken. Als je nu op de button klikt, wordt de validatie wel getriggered, maar wordt ook de postback van de button uitgevoerd. Volgens mij mis ik dus nog een manier om iets als Page.IsValid toe te passen, maar dan in client-side script.
Ik heb nog geprobeerd de pageLoad function te gebruiken ipv $(document).ready(), omdat daar een verschil in zit bij het loaden van de pagina, maar dat geeft geen ander gedrag.
Ik kan alleen nergens iets vinden dat werkt, alleen ingewikkelde verhalen ( bijv. http://forums.asp.net/p/1436924/3241814.aspx#3241814 en http://stackoverflow.com/...panel-nyromodal-success-f , deze laatste heeft wel een code voorbeeld dat de postback stopt, maar dan werkt ie ook niet meer als de pagina wél valid is, dus dat helpt ook niet echt
)
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| <asp:Content ID="Content2" ContentPlaceHolderID="placeHolderBody" runat="Server"> <script type="text/javascript"> $(document).ready(function(){ $("#aspnetForm").validate( { rules: { <%=Naam.UniqueID %>: { minlength: 2, required: true } }, messages: { <%=Naam.UniqueID %>: { required: "Verplicht veld", minlength: "Veld bevat te weinig tekens" } } }); }); </script> <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> <ContentTemplate> <ol> <li> <asp:Label ID="Label1" runat="server" AssociatedControlID="Naam">Naam:</asp:Label> <asp:TextBox ID="Naam" runat="server"></asp:TextBox> </li> </ol> <br /> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> </ContentTemplate> </asp:UpdatePanel> <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"> <ProgressTemplate> wachten op updatepanel1.. </ProgressTemplate> </asp:UpdateProgress> <asp:UpdatePanel ID="UpdatePanel2" runat="server"> <ContentTemplate> Updatepanel 2 </ContentTemplate> </asp:UpdatePanel> <asp:UpdateProgress ID="UpdateProgress2" runat="server" AssociatedUpdatePanelID="UpdatePanel2"> <ProgressTemplate> wachten op updatepanel2.. </ProgressTemplate> </asp:UpdateProgress> </asp:Content> |
In de code-behind staat alleen een Thread.Sleep van 2 sec op hetbutton1 click event.
Het gaat hier dus om een content page, met daarop 2 UpdatePanels met bijhorende UpdateProgress. Dit voorbeeld is een beetje gebaseerd op http://www.dotnetcurry.com/ShowArticle.aspx?ID=310 , waarin wordt uitgelegd hoe je jQuery validation icm met ASP.Net masterpages kan gebruiken.
(in werkelijkheid gaat het om een formuliertje waarop wat gegevens ingevuld worden, daarna worden resultaten in een grid getoond die in de tweede updatepanel staat, je kan dan namelijk resultaten selecteren en daarna weer op een knop klikken voor verwerking, daarvoor is updateprogress2)
Maar het probleem is dus, dat de UpdatePanels en jQuery niet heel goed samenwerken. Als je nu op de button klikt, wordt de validatie wel getriggered, maar wordt ook de postback van de button uitgevoerd. Volgens mij mis ik dus nog een manier om iets als Page.IsValid toe te passen, maar dan in client-side script.
Ik heb nog geprobeerd de pageLoad function te gebruiken ipv $(document).ready(), omdat daar een verschil in zit bij het loaden van de pagina, maar dat geeft geen ander gedrag.
Ik kan alleen nergens iets vinden dat werkt, alleen ingewikkelde verhalen ( bijv. http://forums.asp.net/p/1436924/3241814.aspx#3241814 en http://stackoverflow.com/...panel-nyromodal-success-f , deze laatste heeft wel een code voorbeeld dat de postback stopt, maar dan werkt ie ook niet meer als de pagina wél valid is, dus dat helpt ook niet echt
[ Voor 4% gewijzigd door Haan op 05-04-2010 12:45 ]
Kater? Eerst water, de rest komt later