Kolejny "kliento-walidacyjno-mvcowy post". Tym razem zmagałem się z niedziałającą walidacją po wpięciu w DOM HTMLa zwróconego z serwera. Akcja kontrolera kończyła się instrukcją:   1: return PartialView(viewName, model) , a wstawianie w odpowiednie miejsce po stronie klienta odbywało się poprzez wywołanie jQuery.html(). Zdziwienie moje było o tyle duże, że kawałek DOMu uzyskiwany przez przeglądarkę najwyraźniej zawierał skrypt odpowiedzialny za walidację (inspected by Fir... [More]

Utworzenie własnego atrybutu walidacji danych jest w ASP.NET MVC niezwykle banalne, szczególnie jeśli dziedziczymy z jakiegoś już istniejącego. Dla przykładu takie cacko pozwoli na wprowadzenie jedynie wartości czasu: 1: public class TimeSpanFormatAttribute : RegularExpressionAttribute 2: { 3: public TimeSpanFormatAttribute() 4: : base(@"^\d{2}:\d{2}:\d{2}$") 5: { 6: this.ErrorMessage = "Expected time in format HH:MM:SS"; 7: 8: } 9: } Wys... [More]

Automatycznie generowane walidatory client-side w ASP.NET są spoko - minimalnym nakładem pracy (dodanie atrybutu Required, StringLength, RegularExpression itd na właściwości modelu oraz jednolinijkowej instrukcji <% Html.EnableClientValidation(); %> w widoku) otrzymujemy informacje o błędnych danych bez wycieczki na serwer. Co jednak w przypadku, gdy chcemy sami obsłużyć/zablokować wysyłanie danych na serwer? Sporo się naszukałem, zanim udało mi się znaleźć sposób na sprawdzenie pop... [More]

AbsolutePageUrl

18 listopada 2009 06:59 w kategorii: pro
Tagi:
Problem wydaje się banalny i głupi. Jeżeli istnieje jego proste rozwiązanie to znaczy że JA jestem głupi. I banalny. Chodzi o wygenerowanie w zwykłej własnej klasie linka do jakiejś strony w naszej witrynie. Nie po stronie aspx, nie w kontrolerze... po prostu GDZIEŚ. Przez długi czas działała taka konstrukcja: HttpContext.Current.Request.ApplicationPath + "/MyPage/". Jednak jak to bywa, okazało się że nie jest ona idealna. Wystarczyło skonfigurować aplikację tak, aby była domyślną We... [More]

Tymczasowe wstrzymanie aplikacji ASP.NET

14 września 2009 06:21 w kategorii: pro
Krótka ciekawostka, pewnie znana większości: wrzucając do katalogu głównego aplikacji ASP.NET plik o nazwie app_offline.htm spowodujemy, że będzie on serwowany jako odpowiedź na wszystkie żądania do tej aplikacji. Zastosowań może mieć kilka, z których najbardziej oczywistym jest tymczasowe "zdjęcie" witryny podczas wgrywania nowej wersji czy rozwiązywania jakiegoś problemu: wypełniamy wówczas ten plik komunikatem o tymczasowej niedostępności i tyle, lepsze to niż standardowy komunikat ... [More]

ASP.NET MVC - Reflector vs DropDownList

2 lipca 2009 06:22 w kategorii: pro
Kolejny odcinek o Reflectorze i MVC, tym razem opowieść spod znaku "przecież to NIE MOŻE nie działać!". Oczywiście bezlitosna rzeczywistość twierdziła inaczej i jak zwykle w takich wypadkach bywa – to ona była górą. Zobaczmy cóż takiego się stało... Jak zwykle dla uproszczenia stworzę bezsensowny projekcik specjalnie pod ten scenariusz, aby każdy mógł w prosty sposób odtworzyć cały proces. Praktyki stosowane podczas implementacji wcale nie muszą być godne naśladowania, po prostu chodz... [More]

ASP.NET MVC i Unity

10 czerwca 2009 06:31 w kategorii: pro
Nadejszła wiekopomna chwila – ASP.NET MVC już od jakiegoś czasu egzystuje jako oficjalny produkt, więc oto najwyższa pora na zapoznanie się z nim. Cierpliwie przeczekałem wszystkie ochy i achy, pokonałem chęć bycia "trendy";) i zabieram się za to dopiero teraz. Na pierwszy ogień poszło wpasowanie w cały mechanizm kontenera Dependency Injection tak, aby kontrolery brały się właśnie z niego. Wklejenie gotowych kilku linijek kodu byłoby dość nudne, więc postanowiłem tym razem przedstawić... [More]

AppPool recycle w IIS 6.0

20 lutego 2009 23:22 w kategorii: pro
Podczas tworzenia aplikacji w ASP.NET dość regularnie z różnych powodów musimy wpisywać komendę IISRESET. Wykonanie tej komendy trwa, podniesienie się usług po tak brutalnym potraktowaniu - również. Za dawnych czasów pracy nad ITCore wklepywanie owego złowieszczego polecenia było czynnością regularną niczym WDECH/WYDECH... ale taki już urok developerskiej pracy z MOSS. Wówczas ratunkiem okazał się miniskrypcik, który zamiast ubijać całego IISa restartował jedynie wybraną pulę aplikacji. Trwa to... [More]

Pierwszy odcinek. Drugi odcinek. Odcinek trzeci. Ostatni. Metoda ControlAdapter. Mechanizm ControlAdapters umożliwia przejęcie kontroli nad sposobem renderowania kontrolek danego typu w zależności od przeglądarki, z której przyszło żądanie. Możemy dzięki temu stworzyć alternatywny wygląd kontrolek dla urządzeń mobilnych, czy zmienić standardowy lamerski "tabelkowy" sposób renderowania menu ASP.NET (co nota bene zostało zrobione przez autorów CSS Friendly Control Adapters). W naszym przypa... [More]

MS Ajax w Chrome (2) - metoda HttpModule

13 lutego 2009 06:19 w kategorii: pro
Tagi: , ,
Nieznających tematu zapraszam do pierwszego odcinka po wyjaśnienia. Odcinek drugi. Metoda HttpModule. Mechanizm modułów HTTP pozwala nam wpiąć się w proces przetwarzania żądania przez serwer ASP.NET. Mając do dyspozycji całą masę zdarzeń udostępnianych przez klasę HttpApplication możemy zmodyfikować praktycznie dowolny element w łańcuchu obsługi żądania. W tym przypadku wykorzystamy możliwość dobrania się do docelowej strony i podczas zdarzenia Load zmodyfikujemy zawartego na niej ScriptMa... [More]

MS Ajax w Chrome (1) - metoda kopiuj/wklej

12 lutego 2009 11:20 w kategorii: pro
Tagi: , ,
W trzech odcinkach zaprezentuję trzy sposoby na zmuszenie MS Ajax (UpdatePanel) do bezproblemowego działania w Google Chrome i Safari 3.0. Przedstawienie problemu Zarówno Google Chrome, jak i Safari 3.0 przedstawiają się jako "WebKit". Microsoftowy framework do Ajaxa nie jest na to do końca przygotowany. Zdarzają się sytuacje, w których przeglądarki te "zawieszają się" bądź w inny sposób działają nie tak jak byśmy chcieli. Zidentyfikować taki przypadek można w bardzo prosty sposób: w inny... [More]