Toon posts:

[ASP.NET] jQuery implementatie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De laatste tijd doe ik veel met javascript, ik maak tot nu toe alleen nog maar gebruik van de js libary van microsoft (Ajax) maar nu wil ik ook jQuery gaan gebruiken.

jQuery lijkt goed samen te werken met Ajax, er is echter wel wat functionaliteit die ik beide liberies voorkomt maar dat maakt niet zoveel uit, behalve dan dat er javascript code geladen wordt dat niet gebruikt wordt.

Zover als ik kan zien heeft jQuery geen functionaliteit voor het maken van classes in javascript (behalve dan als je jQuery plugins gaat maken) maar Ajax heeft dit weer wel.

Een mooie oplossing lijkt mij jQuery te gebruiken in combinatie met Ajax op deze manier:
C#:
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
Type.registerNamespace("cc");

cc.DatePicker = function(element)
{
    cc.DatePicker.initializeBase(this, [element]);
};

cc.DatePicker.prototype =
{
    initialize: function()
    {
        cc.DatePicker.callBaseMethod(this, "initialize");

        $(this.get_element()).datepicker({
            monthNames: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
            monthNamesShort: ["Jan", "Feb", "Maa", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
            dayNames: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"],
            dayNamesShort: ["Zon", "Maa", "Din", "Woe", "Don", "Vri", "Zat"],
            dayNamesMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"],
            dateFormat: "dd-mm-yy",
            firstDay: 1
        });
    },
    
    dispose: function()
    {
        cc.DatePicker.callBaseMethod(this, "initialize");
    }
};

cc.DatePicker.registerClass("cc.DatePicker", Sys.UI.Control);

Sys.Application.notifyScriptLoaded();


Dan kan je daar vervolgens weer een control van maken en dit lijkt allemaal goed samen te gaan.

Ik zat er aan te denken een control te maken (als hier nog geen manier voor is?) voor het registreren van scripts en services aan de scriptmanager.
De scriptmanager staat bij mij meestal in de masterpage en je wil niet altijd alle jQuery libaries gebruiken, d.m.v. een control die scripts registreert aan de scriptmanager laad je altijd alleen wat je nodig hebt.
Via de codebehind kan je natuurlijk ook scripts registreren maar het lijkt mij een nettere oplossing om dit in de aspx zelf te doen aangezien het allemaal client-side materiaal is.

Wat vinden jullie van deze ideeën? heeft iemand hier al meer ervaring met jQuery in asp.net?
Zijn er nog andere methoden waar jullie ervaring mee hebben? (een plugin voor jQuery waar je classes mee kan maken bijvoorbeeld zodat de scriptmanager totaal overbodig wordt)

Acties:
  • 0 Henk 'm!

  • AlanSmithee
  • Registratie: Maart 2004
  • Laatst online: 07-07 23:38
Voor het zelf maken van ASP.NET Ajax controls vind ik het zelf zeer lekker om gebruik te maken van AjaxControlToolkit. Vooral voor het laden van scripts en om server-side properties naar je client script te krijgen maakt het je leven makkelijker.

Je kan dan iets als dit doen

C#:
1
2
3
4
5
6
7
8
9
10
    [ClientScriptResource(null, "assembly.resource.path.jquery-1.2.6.js")]
    public static class CommonToolkitScripts
    {        
    }


    [RequiredScript(typeof(CommonToolkitScripts))]
    public class MyClass : ScriptControlBase
    {
    }


en als je MyClass gebruikt wordt "assembly.resource.path.jquery-1.2.6.js" geregistreerd bij je ScriptManager en ook als je meerder controls met de RequiredScript daarop gebruikt wordt die toch maar een keer geladen en door de client gedownload.

Hoe ze bij AjaxControlToolkit werken met de metadata attributies op classes/properties vind ik echt heerlijk en clean.

Verwijderd

Topicstarter
Dat lijkt me inderdaad handig bij het maken van controls die ook server-side code hebben.

Alleen zou ik het versie nummer van jquery achterwegen laten ivm updates, je wil niet al je controls aanpassen als er een nieuwe jQuery versie is.
Hoe ze bij AjaxControlToolkit werken met de metadata attributies op classes/properties vind ik echt heerlijk en clean.
Neem aan dat je dan praat over de $create method, die method is idd ook netjes alleen mis ik de mogelijkheid om meer argumenten mee te geven aan de constructor dan alleen het dom element. Hier is gelukkig wel een workaround voor door de extra argumenten mee te sturen als properties, dit werkt dan zo:

JavaScript:
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
               Type.registerNamespace("cc");
   
               cc.DatePicker = function(element)
               {
                   cc.DatePicker.initializeBase(this, [element]);
                   this._otherControl = null;
               };
   
               cc.DatePicker.prototype =
               {
                   get_otherControl: function()
                   {
                       return this._otherControl;
                   },
                   
                   set_otherControl: function(value)
                   {
                       if (!this.get_isInitialized())
                       {
                           this._otherControl = value;
                       }
                       else
                       {
                           // Exception
                       }
                   },
               
                   initialize: function()
                   {
                       $addHandler(this.get_element(), "click", function() { alert("control click") });
                       $addHandler(this._otherControl, "click", function() { alert("otherControl click") });
                   },
                   
                   dispose: function()
                   {
                       $clearHandlers(this.get_element());
                       $clearHandlers(this._otherControl);
                   }
               };
   
               cc.DatePicker.registerClass("cc.DatePicker", Sys.UI.Control);
               Sys.Application.notifyScriptLoaded();
               
               function pageLoad(sender, e) 
               {
                   var datePicker = $create(cc.DatePicker, {"otherControl": $get("other-control")}, null, null, $get("date-picker"));
               }

Acties:
  • 0 Henk 'm!

  • pasz
  • Registratie: Februari 2000
  • Laatst online: 01-09 23:08
Ik wacht nog even ASP.NET AJAX 4.0 af voordat ik allemaal obscure libraries moet gaan maken.
Microsoft gaat toch ondersteuning bieden voor jQuery in de volgende versie van ASP.NET ?

Hoop dat er op de DevDays meer over bekend wordt, zoniet, dan hou ik deze draad sterk in de gaten.

woei!