2009. április 10., péntek

Postback probléma régebbi IIS (5.x, 6) és/vagy XP Pro és ASP.NET routing esetén

A fejlesztői és a végfelhasználói környezet különbsége sok esetben okozott már fejtörést. Nálunk most éppen a futótérkép fejlesztése körül jelentkezett egy probléma az ASP.NET routing szolgáltatása kapcsán. Konkrétan a fejlesztői gép egy XP míg az alkalmazás valami újabb (esetünkben 2008 server). A routingot pedig használni kell, mert mennyivel jobban néz ki (meg persze SEO frendlibb) egy olyan path, hogy http://www.futoterkep.hu/utvonalak/ mint az, hogy http://www.futoterkep.hu/Modules/TrackList/tr_list.aspx. Igen ám, de az XP Pron az 5.1-es IIS erre az első aszinkron postback után egy 405-ös hibával köp szembe. Ez szerinte annyit jelent, hogy a postot a dev/null-ba küldted és nincs aki válaszoljon túlnan. Hosszas guglizás után sikerült kideríteni (már a hibaüzenet pontos jelentését sem könnyű), hogy a probléma az, hogy a borítékról lemaradt a címzés, így szegény postás vinné, de nem tudja, hogy hová. A HTTP világban ez annyit tesz, hogy a FORM tag action paramétere nem töltődik ki automatikusan és szegény IIS keresné azt a lapot, ahová a kérést küldjük, ami alapértelmezetten a _self vagyis saját maga. Igen ám, de a routinggal megtámogatott oldal esetén ez a lap fizikailag nem létezik, szegény IIS pedig buta és nem tudja megtalálni.

Mi hát a megoldás? Természetesen meg kell címezni a borítékot:

this.form1.Action = this.Request.RawUrl;

Ezután már tudja a postás hová kell vinni és Náncsi néni boldogan nézegeti mekkorát nőttek az unokák.
Persze a dologra rájönni korántsem volt annyira egyszerű, mint ahogy látszik. Remélem van akinek megspóroltam most néhány órányi google túrást…

2009. április 4., szombat

Alámerülés a Google Maps-szel ( vagy -ben)

Régen írtam már bármit is a Google Maps háza táján feltűnő fejlesztésekről. Kicsit úgy vagyok a témával mint az úriemberek a nemi élettel ugye. Csinálom, de nem beszélek róla.
Most viszont számos olyan új dolog került be a Google Maps API-ba, illetve köré, amire felkaptam a fejem, ezért röviden karcolok valamit a számomra legérdekesebbekről.
Először is az Earth API újdonságok (innen jön a rendkívül szellemes cím is).
Az óceán sem akadály mától az APInak, hiszen ezután vidáman fújhatjuk a virtuális buborékokat Jacques Cousteau szellemével a tengeralatti túrákon a böngészőnkben.
Az óceán fenekénél is érdekesebb helyen, mégpedig a Marson is lehet az új verzióval járkálni.
A mostani frissítésben még egy dolog ragadott meg: a pluginnal is lejátszható KML tour. Ezen a területen még van némi elmaradásom, ugyanis szeretnék utánanézni, hogyan is lehet ilyen "túra-fájlt" készíteni. Biztos nem ördöngösség, csak erre is kéne egy kis idő.
Na ennyit a parasztvakításról :)
Kikerült még nemrégiben néhány hasznos kis open-source JS cucc, aminek hozzám hasonló hobbisták, de profi GMap buherátorok is hasznát vehetik.
Nekem leginkább a tabbed infowindow plugin tűnik hasznosnak, de lehet, hogy más a többit is jól tudja hasznosítani.

2009. március 24., kedd

Kép vagy állomány letöltés adott URL mögül

Nemrég szükségem volt a tárgybelire és szokás szerint ismét nem ugrott be elsőre a megoldás.
Gyanítom, hogy más is így lehet ezzel, tehát a magam és minden hozzám hasonlóan feledékeny olvasó számára most lejegyzem a dolgot.
 System.Net.WebClient objWebClient = new System.Net.WebClient();
 objWebClient.DownloadFile(URL, FILENAME);
 System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(FILENAME);

Esetleg van másféle megoldás is?

2009. március 17., kedd

Firefox és az updatepanel esete deafult buttonnal

Nemrégiben komoly szívások voltak a Futótérkép fejlesztése során az alapértelmezett gombok beállításával azon a néhány helyen, ahol még használunk UpdatePanel kontrolt.
Különböző variációk keletkeztek. Vagy nem is posztolt az alapértelmezett gomb, ha posztolt, akkor nem triggerelte az eseményt és természetesen FF és IE alatt teljesen másképp működött minden megoldás.
Végül ez a blogbejegyzés helyes nyomra vezetett, most már legalább a két mainstream böngésző alatt jól működik. A regisztrációs formon ki lehet próbálni ;)

2009. március 9., hétfő

Page életciklus MasterPage használatakor

Egy előzékeny úriember összeírta nekünk a masterpage-ek használatakor fennálló eseményfeldolgozási sorrendet.

Nekem már sokszor okozott fejtörést a dolog, ezért gondolom, hogy mindenkinek hasznos lehet, nem csak nekem:

  1. Page.OnPreInit
  2. MasterPageControl.OnInit (for each control on the master page)
  3. Control.OnInit (for each contol on the page)
  4. MasterPage.OnInit
  5. Page.OnInit
  6. Page.OnInitComplete
  7. Page.OnPreLoad
  8. Page.OnLoad
  9. MasterPage.OnLoad
  10. MasterPageControl.OnLoad (for each control on the master page)
  11. Control.OnLoad (for each contol on the page)
  12. Page.OnXXX (control event)
  13. MasterPage.OnBubbleEvent
  14. Page.OnBubbleEvent
  15. Page.OnLoadComplete
  16. Page.OnPreRender
  17. MasterPage.OnPreRender
  18. MasterPageControl.OnPreRender (for each control on the master page)
  19. Control.OnPreRender (for each contol on the page)
  20. Page.OnPreRenderComplete
  21. MasterPageControl.SaveControlState (for each control on the master page)
  22. Control.SaveControlState (for each contol on the page)
  23. Page.SaveViewState
  24. Page.SavePageStateToPersistenceMedium
  25. Page.OnSaveStateComplete
  26. MasterPageControl.OnUnload (for each control on the master page)
  27. Control.OnUnload (for each contol on the page)
  28. MasterPage.OnUnload
  29. Page.OnUnload

2009. március 7., szombat

Tartalmazott pont lekérdezése és google maps kinézet egyszerű testreszabása

A google maps újabb verziói ismét szolgálnak néhány hasznos aprósággal.
Ezek közül kettőt emelnék ki, amik nekem igen hiányoztak pl. a futótérkép építése közben.

Az egyik ilyen új függvény arra szolgál, hogy lekérdezhessük egy adott pontról, hogy benne van-e az adott tartományban vagy sem. Természetesen koordináták egyszerű vizsgálatával eddig sem volt ördöngősség kideríteni, de mégiscsak egyszerűbb meghívni a

bounds.containsLatLng(center)

metódust, mint koordinátákat hasonlítgatni. A függvény a 2.88-as verziótól elérhető.
A másik hasznos és egyben csinos újítás a 2.147-ben került be:

map.setUIToDefault();

Igen, ez a pontosan azt csinálja amire a neve utal, vagyis beállítja az alapértelmezett kinézetet egyetlen függvényhívással olyanra, mint a "nagy" Google Maps.
Összeütöttem egy kis példát a két újdonság felhasználásával. A térkép alatti üzenet jelzi, ha mozgatás után a marker kilóg a térképről.


Íme a kód lényeges része:

var map;

var center = new GLatLng(47.173378, 19.539185);

$(document).ready(function()

{

if (GBrowserIsCompatible())

{

map = new GMap2($("#GoogleMap_Div")[0]);

map.setUIToDefault();

map.setCenter(center, 10);

GEvent.addListener(map, "moveend", checkIsInView);

var myMarker = new GMarker(center);

map.addOverlay(myMarker);

checkIsInView();

}

});

function checkIsInView()

{

var bounds = map.getBounds();

var message = ";

if (bounds.containsLatLng(center))

{

message += "green;\">Benne van";

}

else

{

message += "red;\">Nincs benne";

}

message += "";

$("#message")[0].innerHTML = message;

}

2009. március 4., szerda

SQL 2008 telepítési probléma

sqlMa az egyik gépemen próbáltam frissíteni az Sql Server 2005 verziót 2008-ra.
Elvégezte a szükséges vizsgálatot, majd megkért, hogy indítsam újra a gépet. Régi windows felhasználóként ezen meg sem lepődtem, hanem megtettem.
Aztán még egyszer.
Aztán még egyszer.
Aztán még egyszer.
Aztán elkezdtem guglizni, hogy mi is lehet a probléma.
Elég hamar megtaláltam a választ:
A regisztrációs adatbázisban a "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager" kulcs alatti összes "PendingFileRenameOperations" értéket kikerülve minden gyönyörűen települt.