Nem oly rég egy érdekes problémába szaladtam bele. Ha egy asp.net-es file upload vezérlőt aszinkron módon töltök be (pl. update panel segítségével) akkor mindig az mutatja, hogy nincs fájl feltöltve, míg ha ugyanazt a vezérlőt, ugyanott full postback-el akkor működik rendeltetésszerűen. Bevallom ezt a problémát bekeríteni sem volt egyszerű, de innen már gyorsan ment a megoldás. Csupán egy sort kellett az adott oldal page load eseményébe bigyeszteni és minden megoldodott.
Page.Form.Attributes.Add("enctype", "multipart/form-data");
Ez volt a varázsige.
Az történik ugyanis, hogyha file upload vezérlőt kell megjeleníteni az oldalon az asp.net motor a generált html kódban a form elemnél meghatározza annak az enctype attributumát méghozzá multipart/form-data -ra. Ekkor nem történik karakter kódolás. Ez szükséges ahhoz, hogy fájl feltöltés működjön az oldalon.
Viszont ha én csak az asszinkron hívással jelenítem meg a file upload vezérlőt akkor csak az érintett oldal szakasz kerül frissitésre és az ettől távol eső form elemet a kutya nem piszkálja. Így ilyenkor nem tud kiegészülni az a fenti attributummal.
Ezt elkerülendő, ha egy oldalon file upload vezérlőt szeretnék használni asszinkron hívással, a fenti sor-t mindig oda kell bigyeszteni a page load eseménybe