W ostatnim wpisie wspomniałem, że Web.Config został usunięty i zastąpiony project.json. Pokazałem, jak dodać referencje czy skonfigurować wersję framework’a. Web.Config jednak zawierał jeszcze jedną ważną sekcję – AppSettings. ASP.NET 5 wspiera różne typy plików konfiguracyjnych – JSON, INI oraz XML. Możemy wszystkie je dodać jednocześnie do solucji i nie spowoduje to konfliktów. Nie jesteśmy ograniczeni […]
O nowościach w MVC 6.0 pisałem już np. tutaj http://www.pzielinski.com/index.php?s=MVC+6 Moim zdaniem, największe zmiany jednak mają miejsce w infrastrukturze i architekturze wewnętrznej ASP.NET. Jedną z tych zmian jest plik project.json, który definiuje wszelkie referencje w projekcie. Tworząc nowy projekt, project.json będzie wyglądać następująco: { "webroot": "wwwroot", "userSecretsId": "aspnet5-WebApplication3-157b1a61-1b29-4343-8796-15c96e7e7daa", "version": "1.0.0-*", "dependencies": { "EntityFramework.SqlServer": "7.0.0-beta4", "EntityFramework.Commands": […]
W ASP.NET MVC 6.0 (ASP.NET 5.0) usunięto metodę Html.Action. Służyła ona głównie do generowania widoków częściowych. Na przykład, jeśli jakąś funkcjonalność mieliśmy na każdej stronie, wtedy warto było stworzyć child-action i renderować osobno każdą część. Tworzyliśmy wtedy osobny widok i akcję w kontrolerze. Główny widok wywoływał daną akcję (child-action) na kontrolerze i renderował wskazaną część. […]
Tag Helpers mają na celu ułatwić tworzenie widoków. Cel jest taki, aby widok jak najbardziej przypominał czysty plik HTML. Pierwszym etapem było wprowadzenie Razor, a teraz w MVC 6 mamy tzw. Tag Helper. W celu przetestowania tego samemu, należy zainstalować najpierw Visual Studio 2015. Zacznijmy od przykładu. Klasyczny sposób na definiowanie linku to: @Html.ActionLink("Jakis tekst", […]
Czasami w widoku wywołujemy funkcję JavaScript z parametrami, które są przekazane za pomocą ViewModel z kontrolera. Załóżmy, że nasza metoda w kontrolerze wygląda następująco: ViewModel z kolei zawiera jedną właściwość: Następnie zdefiniujmy jakąkolwiek funkcję JS przyjmującą parametry: Błędne wywołanie funkcji w razor wygląda z kolei następująco: Jest to nic innego, jak klasyczny przykład wstrzyknięcia złośliwego […]
Dzisiaj o prostej bibliotecę dla ASP.NET MVC. Często w ASP.NET MVC musimy stosować zahardcodowane string’i, co oczywiście nie jest dobrą praktyką. Na przykład, aby wygenerować link do danej akcji w razor, moglibyśmy: @Html.ActionLink("Opis linku", "Add", "Persons", new { id=Model.MasterId }, null) Za pomocą T4MVC wystarczy: @Html.ActionLink("Opis linku", MVC.Dinners.Add(Model.MasterId)) T4MVC, jak sama nazwa wskazuje, oparty jest […]
W ostatnim poście było o SpecsFor, jako alternatywy dla SpecsFlow. Pokazane przykłady były ogólne i nie dotyczyły konkretnej technologii. Z BDD bardzo często korzysta się w celu przetestowania UI. W końcu wpisywane scenariusze, odzwierciedlają typową interakcję użytkownika z aplikacją. Osoby nietechniczne zwykle definiują wymagania z punktu widzenia użytkownika a nie wewnętrznej infrastruktury, która oczywiście nie […]
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 […]
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 […]
W najnowszej wersji 5, mamy do dyspozycji nowy rodzaj filtrów, implementujący interfejs IOverrideFilter: public interface IOverrideFilter { /// <summary> /// Gets the type of filters to override. /// </summary> /// /// <returns> /// The filter to override. /// </returns> Type FiltersToOverride { get; } } Atrybuty przydają się, gdy mamy jeden filtr nałożony globalnie i […]
platforma .NET, patterns & practices, .NET dla enterprise