AJAX w starych
wersjach IE wymaga
ActiveX

02.04.2008
----------------------------------------------------------------------------------------------------------------
Zaletą pisania aplikacji intranetowych jest to, że często wszyscy użytkownicy programu będą korzystać z identycznej przeglądarki. Niestety w wielu instytucjach tą przeglądarką jest IE6.

Jeśli w budowanym rozwiązaniu zamierzasz użyć AJAXa nie zapomnij w wymaganiach warstwy klienckiej określonych w umowie, dodać obsługę ActiveX. Dlaczego nie wystarczy włączyć JavaScript? W IE5.x i IE6 za obsługę asynchronicznej komunikacji z serwerem odpowiada obiekt ActiveX. Utworzyć go można w taki sposób:
var xhr = new ActiveXObject("Microsoft.XMLHTTP");

W innych przeglądarkach obiekt XmlHttpRequest tworzony jest za pomocą kodu:
var xhr = new XMLHttpRequest()
więc użycie ActiveX nie jest konieczne (dotyczy to także IE7).

Jeśli myślisz, że możesz nie przejmować się IE6 to niestety jesteś w błędzie. Ta przestarzała (wypuszczona w 2001) przeglądarka ma nadal 30% udziału w rynku internetowym. W intra- netach firm i urzędów na pewno nie jest lepiej...
------

Pozycjonowanie absolutne
w trybie Design
Visual Studio 2008

18.03.2008
----------------------------------------------------------------------------------------------------------------
Gdy w VS 2008 przeciągasz kontrolki z Toolboxa na widok strony (działając w trybie Design) są one pozycjonowane wierszami (nie możesz przeciągnąć ich w dowolny obszar strony). By zmienić tryb pozycjonowania dla jednej kontrolki musisz ją zaznaczyć i skorzystać z opcji menu "Format | Position...".

A co jeśli chciałbyś ustawić środowisko w taki sposób by każda przeciągana z palety narzędzi kontrolka była domyślnie pozycjonowana absolutnie? W wersji 2005 służyła do tego odpowiednia opcja menu "Layout". Aby wprowadzić to ustawienie w najnowszej wersji Visual Studio trzeba skorzystać z opcji...

Wybierz "Tools | Options...", w otwartym oknie zaznacz checkboxa "Show all settings", wybierz kategorie "HTML Designer | CSS Styling" i zaznacz checkboxa "Change positioning to absolute for controls added using Toolbox, paste or drag and drop". Gotowe!

Pamiętaj tylko, że do przeciągania elementów na stronie służy mała etykietka, która pojawia się po zaznaczeniu kontrolki.
------

Źródło asynchroni-
cznego postbacka

07.02.2008
----------------------------------------------------------------------------------------------------------------
Jeśli w swoich programach korzystasz z ASP.NET AJAX Extensions, możesz chcieć sprawdzić element, który spowodował asynchroniczne wysłanie danych do serwera. Przypuścimy, że w metodzie Page_Load jest pewien kod, który ma być wykonany jedynie, gdy źródłem postbacka jest kontrolka Button1 umieszczona w UpdatePanelu...

if (ScriptManager1.IsInAsyncPostBack)

{

    if (ScriptManager1.AsyncPostBackSourceElementID
    == Button1.UniqueID)

    {

       Label1.Text = "Bla bla bla";

    }

}


Wszelkich potrzebnych informacji dostarczy Ci instancja kontrolki ScriptManager. Najpierw sprawdzamy, czy postback jest w ogóle asynchroniczny. Jeśli tak to badamy element źródłowy za pomocą właściwości AsyncPostBackSourceElementID. Uwaga! Podczas porównywania nazwy źródła i nazwy kontrolki należy korzystać z właściwości UniqueID a nie ID. Porównywanie po ID nie zadziałałoby gdyby kontrolka Button1 znajdowała się w elemencie wykorzystującym interfejs INamingContainer (czyli np. w Repeaterze).
------

Zdradliwa parseInt()
25.12.2007
Dzięki funkcji parseInt() języka JavaScript w łatwy sposób można dokonać konwersji łańcucha tekstowego na liczbę całkowitą. Niestety korzystanie z niej w celu pobrania wartości wpisanej przez użytkownika niesie za sobą pewne zagrożenie.
Przeanalizuj poniższy fragment kodu:

function dodaj()

{

    var txt = document.getElementById('TextBox1');   

    var a = parseInt(txt.value);

 

    return a + 10;

}


Co stanie się gdy użytkownik wprowadzi do okienka 10? Oczywiście funkcja zwróci wartość 20. Co jednak wydarzy się gdy ktoś wpisze do okienka ciąg 010? Otóż w rezultacie otrzymamy 18! Stało się tak dlatego, że funkcja parseInt() wywoływana tylko z jednym parametrem zinterpretowała tekst wpisany przez usera aplikacji jako wartość podaną w systemie ósemkowym (napis postaci 0x10 został by odczytany jako szesnastkowy). Możesz być niemal pewien, iż użytkownik programu zakładał, że wprowadzenie zera przed liczbę nie powinno mieć wpływu na wynik. A jednak ma! Co zrobić by program działał bardziej intuicyjnie? Wystarczy dodać w wywołaniu funkcji parseInt() drugi parametr określający podstawę wykorzystywanego systemu liczbowego. Należy więc zastosować taki kod:

function dodaj2()

{

    var txt = document.getElementById('TextBox1');   

    var a = parseInt(txt.value, 10);

 

    return a + 10;

}

------

Niebezpieczne połą-
czenie onblur
i disabled w IE6

19.11.2007
Jeżeli masz coś wspólnego z aplikacjami webowymi to pewnie nerwowo reagujesz na widok IE6. Oto powód by znielubić tą przestarzałą (niestety wciąż popularną) wersję Internet Explorera jeszcze bardziej.

Załóżmy, że masz na formie kontrolki TextBox i Button. Zależy Ci na tym by zablokować przycisk gdy pole tekstowe jest puste. Piszesz więc taką prostą funkcję JavaScript:

function blokuj()

{

    if (document.getElementById('TextBox1').value == '')

    {

        document.getElementById('Button1').disabled = true;

    }

}


i podpinasz ją do zdarzenia onblur (zdarzenie ma miejsce gdy kontrolka traci focus) TextBoxa... Pozornie wszystko działa jak należy - gdy pozostawisz pole tekstowe puste i przeskoczysz klawiszem Tab na inną kontrolkę przycisk zostanie zablokowany. Co jednak stanie się gdy trzymając kursor tekstowy w pustym okienku klikniesz bezpośrednio w przycisk? IE6 zawiesi się do momentu, aż przełączysz się na okno innego programu. By temu zaradzić możesz skorzystać ze zdarzenia onfocusout zamiast onblur jednak takie rozwiązanie nie zadziała poza IE. Można także zamiast kontolki Button użyć ImageButton albo bawić się ukrytym divem, z właściwością Z-index wyższą niż przycisk...
------

Kopiowanie kodu wraz
z formatowaniem

04.11.2007
Jeśli napotykasz czasem na konieczność zaprezentowania fragmentu kodu C# jako elementu strony WWW lub maila HTML na pewno docenisz plugin CopySourceAsHtml. Jest to dodatek do Visual Studio 2005, który rozszerza menu kontekstowe o opcje "Copy As HTML". Po jej wybraniu pokazuje się okno dialogowe umożliwiające ustawienie opcji formatowania (możesz zostawić domyślne). Gdy naciśniesz przycisk "OK" w schowku znajdzie się gotowy do wklejenia fragment kodu opakowany w tag div. Oto prosty przykład możliwości tego pluginu:

   26     public int Test(int x)

   27     {

   28         int score = 0;

   29         for (int i = 0; i < x; i++)

   30         {

   31             score += Math.Cos(x + int.MaxValue);

   32         }

   33     }


Dodatek ten można pobrać za darmo z tej strony.
----------------------------------------------------------------------------------------------------------------