To make this review complete, I’m providing solution with examples of all mechanisms usage, it can be found at my GitHub: https://github.com/szabl/AspNetViewsCodeReuseExamples OverviewMethodBrief descriptionUsageHTML HelpersC#/VB.NET methods returning html as a stringBest suits view elements, where quite a lot of logic is necessary to generate short HTML. Rather not good for elements specific to a specific view.Display/Editor TemplateView file used as a template for displaying or editing given data type....
Sztuka programowania 3767 dni, 11 godzin, 12 minut temu 118 źrodło rozwiń
Chciałem Wam dzisiaj przedstawić fajną bibliotekę dla .net opartą na wkhtmltopdf do generowania dokumentów PDF z kodu HTML. Bardzo długo szukałem optymalnego dla mnie rozwiązania, aż w końcu trafiłem właśnie na Rotativę. Próbowałem wielu rozwiązań, ale każde miało swoje wady. Długi czas próbowałem walczyć z iTextSharp, ale składnia dokumentu PDF była mocno odpychająca, a licencja nie była zachęcająca. Później trafiłem właśnie na wkhtmltopdf, ale i ta biblioteka miała dwie zasadnicze wady, które mnie znie...
Już kilka tygodni typu pisałem o ASP.NET MVC 5 Scaffolding. Jak wspomniałem, domyślny szablon nadaje się do prototypów albo tymczasowych aplikacji. W praktyce będziemy chcieli wykorzystać IoC i własne usługi, a nie bezpośrednio operować na bazie danych. Za pomocą własnego szablonu, można wszystko dostosować do konkretnego projektu i infrastruktury. Najpierw ściągamy pakiet szablonów VS z http://sidewaffle.com/. Oprócz tego, musimy zainstalować Visual Studio 2013 Update 2 oraz Visual Studio 2013 SDK. Na...
ASP.NET MVC dba o to, aby niemożliwe było dokonanie ataku CSRF. Nie musimy sami generować tokenów i wszystko zostanie obsłużone przez framework. Niestety czasami taka obsługa nie jest zbyt user-friendly. Ostatnio spotkałem następujący scenariusz:Otworzyłem stronę do logowania w dwóch osobnych tabach. Sesja jest więc współdzielona.W pierwszej z nich, kliknąłem loguj. Token w tym momencie na serwerze jest unieważniany.W drugim tabie token wygenerowany i przechowany w ukrytym polu, nie pokrywa się już z ty...
Zwykle widoki nie są kompilowane aż do momentu publikacji i pierwszego zapytania. Czasami jednak warto, aby były one kompilowane w czasie pracy z kodem. Bardzo łatwo popełnić literówkę, która nie będzie wykryta aż do momentu, gdy użytkownik będzie chciał wejść na tą stronę. Przy wielu widokach jest to dość niewygodne i może okazać się bardzo uciążliwe.
W poprzednim poście pisałem o podstawach Web API. Dzisiaj zajmiemy się obsługą błędów. Sprawdźmy najpierw, co stanie się, gdy nasz kontroler (patrz poprzedni wpis), zwróci jakiś wyjątek np.:public Person GetPersonById(int id) { if(id
W ostatnim wpisie wyjaśniłem jak bardzo sesja wpływa na wydajność i skalowalność aplikacji. Dzisiaj chciałbym pokazać przykład i konkretne liczby, które pozwolą nam oszacować skalę problemu. Zacznijmy od ASP.NET MVC. Stworzymy trzy kontrolery:SessionlessCotroller – kontroler będzie miał zablokowaną sesję. SessionController – kontroler zapisuje dane do sesji. SessionReadOnlyController – kontroler ma dostęp tylko do odczytu. Kod:[SessionState(SessionStateBehavior.Required)] publicclass SessionController...
Synchronizacja i przechowywanie sesji może być bardzo niekorzystne dla wydajności aplikacji webowej. Wyobraźmy sobie, że użytkownik wywołuje kontroler kilkukrotnie w ramach tej samej sesji. ASP.NET MVC musi zadbać o to, aby sesja zawsze miała prawidłową wartość. Niestety jest to osiągane poprzez kolejkowanie zapytaniach w ramach tej samej sesji. Jeśli zatem wywołujemy dwukrotnie metodę A, nie zostanie to wykonane współbieżnie. Dobrą stroną takiego mechanizmu jest fakt, że zapis i odczyt sesji jest bezpie...
Domyślnie ASP.NET MVC blokuje metody zwracające JSON, które wywołuje się za pomocą HTTP GET. Przykład:public ActionResult GetData() { return Json(new []{new Person("Piotr","Zielinski")}); } Wykonanie zakończy się wyjątkiem: This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet. Z tego względu, programiści często wywołują Json z parametrem AllowGet:publi...
Kiedyś już o tym pisałem pobieżnie (kilka lat temu), ale dzisiaj chciałbym pokazać inny przykład wraz ze wszystkimi możliwymi parametrami. Stwórzmy najpierw klasyczny formularz i kontroler: @using (Html.BeginForm()) { @Html.DropDownList("selectedGroup",new SelectList(new []{"All","GroupA","GroupB"})) <input type="submit" value="Refresh"> } Prosty formularz z ComboBox i przyciskiem, który powoduje ponowne załadowanie strony oraz wykonanie metody GetData z nowym parametrem:public ActionResul...
Kilka wpisów wcześniej pisałem o atrybucie OutputCache. Dla prostych zastosowań sprawdza się dość dobrze, ale bardzo szybko można dostrzec jego ograniczenia i błędy. Przedstawmy najpierw kilka niedogodności związanych z OutputCache.
Hej. Bardzo lubię, kiedy życie zawodowe samo podsuwa mi pomysły na wpisu na tego bloga. Tak jest właśnie w tym przypadku – właśnie dziś musiałem sobie poradzić z opisywanym problemem czyli potrzebą zatwierdzania kilku części formularza kilkoma różnymi przyciskami submit. Starzy wyjadacze ASP.NET MVC pewnie doskonale wiedzą jak to zrobić, pewnie też znajdą się osoby, które powiedzą, że w ogóle tak nie powinno się robić, jednak ASP.NET MVC na to pozwala… Zresztą czasami spotykamy się z sytuacją niestandard...
CSRF jest dzisiaj bardzo dobrze znanym atakiem, ale niestety wciąż wiele aplikacji internetowych pozostaje niezabezpieczonych. W poście nie będę opisywał szczegółowo CSRF ponieważ w Internecie jest już od dawna mnóstwo informacji o tym. Chciałbym jednak pokazać jak dzięki ASP.NET MVC możemy w łatwy sposób uchronić się przed atakiem. W MVC standardowy formularz tworzymy w następujący sposób:@using (Html.BeginForm("Manage", "Account")) { } Następnie mamy w kontrolerze akcję implementującą obsług...
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
Until now we had many excuses for not writing integration tests:we prefer unit tests over integration testsour business logic (aka services) is separated and thoroughly testedwe keep our ontrollers on a dietUI consists mostly of standard elements (aka widgets) which are tested on their ownwe are lazy But there was still too much space for error. From time to time a seemingly innocent change in Razor view (or HTML helper, or filter, or “something completely irrelevant”) unexpectedly broke one of the page...
Sztuka programowania 4021 dni, 3 godziny, 8 minut temu 105 źrodło rozwiń
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
Leave a reply W ASP.Net z powodu bez stanowej natury aplikacji sieciowych w celu zapewnienia utrzymania sesji dostępny jest obiekt sesji. Zapis i odczyt z niego jest prosty wystarczy odwołać się do niego jak do słownika:this.Session["key"] = value; value2 = this.Session["key"]; Dziś nie chciał bym jednak pisać o tym jak używać sesji, lecz jak ją skonfigurować by zapewnić jej wydajną prace. Domyślnie działa ona w trybie In-Process. Przechowywana jest w pamięci procesu roboczego na web serwerze. Tryb...
O wzorcach projektowych w ASP.NET MVC słyszał chyba każdy. Większość z nas przynajmniej raz widziała jakiś filmik instruktażowy bądź wideokonferencję promującą stosowanie właściwych wzorców na tej platformie. Jednakże po opanowaniu teorii przychodzi wreszcie pora na to, aby wcielić ją w życie. Co się wtedy okazuje?