Jak poslat data na ASP.NET Handler

Jelikoz jsem nad tim stravil notnou davku casu (…), tak to tu davam, snad to nekomu bude prospesne. Kazdopadne, radim vami dobre, vykaslete se na vsechny objekty XMLHttpRequest, ActiveXObjects(ktere funguji pouze v IE) nebo jine frameworky urcene primo k tomuto, napr. ja jsem nasel XHConn.

Jedine co k tomu potrebujete je jQuery. Ja jsem pouzil verzi 1.4.1, kterou mate pokud pouzivate VS 2010 jiz v sablone. Nakonec jsem vybral 2 metody, ktere 100% funguji ve vsech 4rech nejpouzivanejsich prohlizecich(a funguje to i na localhostu, nekde jsem cetl ze chrome toto na localhostu neumi, tak jsem to kopiroval na hosting ale ted vidim – byl jsem naivni a hloupy ze jsem tomu veril), zkousel jsem to na techto prohlizecich: Google Chrome 17.0.963.56 m, Opera 11.61, Mozilla Firefox 10.0.1 a IE 8(jak jsem psal uz drive, nemam rad IE9 protoze ten je podle me jeste vetsi *vina nez IE8).

A ted ke samotnemu kodu, xml jsem nezkousel ale JSON funguje bezvadne ve vsech:
Jednodussi varianta bez parametru – metoda post:


A slozitejsi varianta s parametry – metoda ajax:


Jako metodu success muzete zadat null, stejne se s temi daty asi neda nic delat – zrejme chyba v paremetru/metode success. Musite volat pro ziskani dat metodu get(viz nize).

Takze metoda se neda vyuzit i kdyz chcete ziskat data z handleru. Jinak metoda branchAjaxFailed muze vypadat nejak takto kdybyste ji chteli:


(to cislo za “posli” je poradove cislo metody – volal jsem je vsechny najednou a zkousel. #justsayin).

A ted jeste kod ASHX handleru:


A jak vidite, handler zapisoval na disk obsahy parametru rat a tab. Vysledek(kdyz jsem pred kazdym browserem menil parametr tab v JS) je takovy:

7 ie
9 ie
7 chrome
9 chrome
7 firefox
9 firefox
7 opera
9 opera

Pokousel jsem se i ziskat z handleru data metodou .ajax ale at jsem volal metodu prompt nebo alert, tak se mi nic nezobrazilo. Proto pokud chcete ziskat data, musite volat metodu .get a parametry predat v querystringu:


Pokud potrebujete ziskat vice parametru, musite si je jednoduse vyparsovat z parametru data.

Pokud volate metodu get, musite v handleru zapisovat napriklad metodou context.Response.Write(zde vracim ten querystring parametr ktery jsem mu predal – funguje):


Objevil jsem i na netu priklady volani webovych sluzeb, ale ja jsem si to rozdelil – webove sluzby(asmx) budu pouzivat pro spolupraci webu a desktopovych aplikaci.

Handlery(ashx) naopak kdyz stranka bude potrebovat neco po serveru bez reloadu/postbacku.

Leave a Reply

Your email address will not be published. Required fields are marked *