Projektowanie aplikacji WWW w Frejmworku ASP.NET MVC 4.0
|
|
- Ryszard Cieślik
- 7 lat temu
- Przeglądów:
Transkrypt
1 Wydział Elektroniki i Informatyki PK Katedra Inżynierii Komputerowej Projektowanie aplikacji WWW w Frejmworku ASP.NET MVC 4.0 Opis przykładu projektowania aplikacji WWW serwis Subskrypcja. Prof. W. Khadzhynov
2 Spis treści Projekt aplikacji WWW w frejmworku MVC... 2 Wstęp... 2 Diagram przypadków użycia systemu... 2 Przygotowanie projektu Przygotowanie bazy danych... 6 Dodanie modelu... 7 Utworzenie kontrolera Subscriber Dodanie widoków dla kontrolera Subscriber Modyfikacja routingu oraz dostosowanie strony wzorcowej Dodanie modelu Newsletter Utworzenie kontrolera Newsletter Dodanie widoków dla kontrolera Newsletter Utworzenie użytkownika Administrator Utworzenie modelu Administrator Utworzenie kontrolera Administrator Dodanie widoków dla kontrolera Administrator Podsumowanie
3 Projekt aplikacji WWW w frejmworku MVC Wstęp Ten materiał dydaktyczny został opracowany na bazie książki ASP.NET MVC 4 Programowanie aplikacji webowych wydawnictwa Helion, 2013, autorzy : Zbigniew Fryżlewicz, Ewa Bukowska, Daniel Nikończuk. Testowa wersja tej aplikacji jest uruchomiona pod adresem Wejście dla administratora : Nazwa Użytkownika: Administrator Hasło: Qwer.1234 Diagram przypadków użycia systemu W tym projekcie wytworzony zostanie serwis WWW, który pozwoli zilustrować pełny cykl budowania aplikacji w oparciu o Framework ASP.NET MVC. Przypuścimy że jest potrzeba tworzenia serwisu Subskrypcja który ma służyć do gromadzenia adresów oraz rozsyłania nowości (newslettera) do wszystkich zapisanych subskrybentów. System oferuje następne działania: subskrypcję newslettera, rezygnację z subskrypcji, rozsyłanie newslettera, przeglądanie listy subskrybentów. Dwa pierwszych działania są dostępne dla zwykłych użytkowników, dwa ostatnie dla administratora serwisu. Subskrypcja newslettera polega na wypełnienie formularza rejestracyjnego z polami: imię, nazwisko, oraz adres subskrybenta. Dane rejestrującego się użytkownika są zapisywane w bazie danych. Aplikacja ma podstawowe zabezpieczenia. Nie jest możliwa podwójna rejestracja użytkownika ani też desubskrypcja przy braku wcześniejszej subskrypcji. Rezygnacja z subskrypcji newslettera przebiega podobnie. Użytkownik wypełnia analogiczny formularz, ale ma teraz do dyspozycji opcję Rezygnacja z newslettera. Po wprowadzeniu niezbędnych danych i ich zatwierdzeniu dane subskrybenta są trwale usuwane z systemu. Działania administratora polegają na przygotowaniu newslettera i uruchomieniu procedury wysłania go do wszystkich zarejestrowanych subskrybentów. Dodatkowo administrator może wyświetlić listę wszystkich subskrybentów, ale bez możliwości usuwania elementów tej listy i modyfikacji danych subskrybentów. 2
4 Na podstawie wizji biznesowej systemu można wyznaczyć dwóch użytkowników: Subskrybenta i Administratora oraz sześć przypadków użycia (rys.0). Utworzenie użytkownika Administrator oraz zalogowanie (wylogowanie) zostanie zrealizowane przy pomocy biblioteki SimpleMembership. Mechanizm SimpleMembership udostępnia własną logikę biznesową służącą do zarządzania kontami użytkowników oraz rolami, a także przechowuje dane niezbędne do funkcjonowania w relacyjnej bazie danych. Dzięki użyciu SimpleMembership w aplikacji będzie można w prosty sposób utworzyć użytkownika i rolę Administrator oraz identyfikować tego użytkownika w systemie. Rys.0. Diagram Przypadków użycia 3
5 Przygotowanie projektu. Przystępując do tworzenia projektu, należy uruchomić Visual Studio 2012 jako administrator: 1. Kliknij prawym przyciskiem myszy ikonę VS2012 i z menu kontekstowego wybierz Uruchom jako administrator (rys1). Rys1. 2. Utwórz nowy projekt, wybierając z menu FILE/New/Projekt 3. W nowym oknie dialogowym, w gałęzi języka Visual #C, wybierz opcję typu projektu Web oraz ASP.NET MVC 4 Web Application. Podaj lokalizację i nazwę projektu MvcApplicationSubskrybcja (Rys.2) Rys Pojawi się nowe okno dialogowe wyboru szablonu projektu (Rys.3). Wybierz szablon Internet Application, który pozwala utworzyć aplikację z obsługą uwierzytelniania użytkowników przy 4
6 użyciu biblioteki SimpleMembership. W polu View engine wybierz silnik Razor i odznacz pole Create a unit test Project. Kliknij OK. Rys. 3. Po tych czynnościach należy skompilować projekt, wybierając BUILD/Build Solution, a następne uruchomić aplikację Ctrl+F5. Uruchomienie aplikacji spowoduje uruchomienie serwera deweloperskiego i w domyślnej przeglądarce wyświetli się strona startowa rys. 4. 5
7 Rys. 4. Przygotowanie bazy danych Do trwałego przechowywania danych zbudujemy bazę danych w oparciu o MS SQL Server Compact. Ten serwer zawiera następne zalety: Nie wymaga żadnej instalacji i można go użyć, dodając do projektu jedynie odpowiednie biblioteki DLL. Wdrażając aplikację w systemie docelowym, nie trzeba wykonywać żadnych działań związanych z przemieszczeniem bazy danych. Wykorzystanie MS SQL Server Compact nie potrzebuje opłat licencyjnych. Dodanie serwera i bazy danych do projektu MvcApplicationSubskrybcja wymaga następujących działań: 1. Przejdź do okienka Solution Explorer, zaznacz katalog App_Data, otwórz PPM menu kontekstowe i wybierz Add/New Item 2. Pojawi się nowe okno dialogowe. W lewym okienku wybierz Installed/Visual C#/Data, a w prawym wybierz obiekt SQL Server Compact 4.0 Local Database. W polu Name wpisz nazwę bazy danych SerwisSubskrypcja.sdf i zatwierdź ustawienia, klikając przycisk Add rys Kliknij podwójnie plik SerwisSubskrypcja.sdf znajdujący się w katalogu App_Data otworzy się okienko Server Explorer ( rys 6), które zawiera spis połączeń bazodanowych w aplikacji. 6
8 4. Dodanie tabeli, w której przechowywane będą dane subskrybentów, na tym etapie nie jest konieczne. Tabela zostanie utworzona automatycznie po zaimplementowaniu modelu domenowego reprezentującego dane subskrybentów oraz klasy kontekstowej. Rys. 5. Rys.6 Dodanie modelu Model domenowy aplikacji MvcApplicationSubskrybcja oprócz klas, które zostały wygenerowane podczas tworzenia projektu przy użyciu szablonu Internet Application i dotyczą obsługi rejestrowania i logowania się użytkowników (plik AccountModels.cs z katalogu Models), potrzebna jest klasa, która reprezentuje tabelę przechowującą dane subskrybentów w bazie danych. Klasę o nazwie Subscriber umieścimy, zgodnie z konwencją w katalogu Models. Należy również zdefiniować klasę kontekstową SubscriptionContext. Oto wymagane dzialania: 7
9 1. Zaznacz katalog Models, otwórz PPM menu kontekstowe i wybierz Add/Class 2. Pojawi się nowe okno dialogowe. W lewym okienku wybierz Installed/Visual C#/Data, a w prawym wybierz obiekt Class. W polu Name wpisz nazwę Subscriber.cs i zatwierdź ustawienia, klikając przycisk Add rys.7. Rys.7. Dodanie klasy Subscriber. 3. Do utworzonej klasy Subscriber wpisz kod zgodnie z listingiem 1. Listing 1. using System; using System.ComponentModel.DataAnnotations; namespace MvcApplicationSubskrybcja.Models public class Subscriber [ScaffoldColumn(false)] public long Id get; set; public string Name get; set; public string Surname get; set; public string get; set; public DateTime RegistrationDate get; set; 4. Postępując analogicznie, utwórz klasę SubscriptionContext i wpisz do niej kod zgodnie z listingiem 2. 8
10 Listing 2. using System.Data.Entity; namespace MvcApplicationSubskrybcja.Models public class SubscriptionContext : DbContext public SubscriptionContext() : base("serwissubskrypcja") public DbSet<Subscriber> Subscribers get; set; Wyjaśnienia wymaga zastosowanie i budowa klas Subscriber i SubscriptionContext. Klasa Subscriber jest używana do reprezentowania subskrybentów w bazie danych. Każda instancja tej klasy odpowiada rekordowi tabeli Subscribers w bazie danych, a każde pole z klasy Subscriber jest mapowane na kolumnę w tabeli Subscribers. Mapowanie jest realizowane przy pomocy Entity Framework. Tabelę Subscribers w bazie danych wytworzy automatycznie Entity Framework, a jej struktura będzie odpowiadała strukturze klasy Subscriber. Nazwa tabeli Subscribers została utworzona na podstawie nazwy klasy Subscriber, zgodnie z konwencją. Aby skorzystać z mapowania Entity Framework, do projektu należy dodać klasę kontekstową SubscriptionContext. Klasa SubscriptionContext dziedziczy po klasie DbContext z przestrzeni nazw System.Data.Entity. SubscriptionContext zawiera bezparametrowy konstruktor i wywołanie konstruktora bazowego, który jako parametr przyjmuje nazwę bazy danych. W przypadku aplikacji MvcApplicationSubskrybcja baza danych nazywa się SerwisSubskrypcja.sdf, dlatego do konstruktora bazowego przekazywana jest nazwa SerwisSubskrypcja. W przypadku gdy nazwa bazy danych nie zostanie przekazana, Entity Framework domyślnie będzie szukał bazy danych o nazwie MvcApplicationSubskrybcja.Models.SubscriptionContext.sdf, ponieważ klasa SubscriptionContext zdefiniowana jest w projekcie w takiej przestrzeni nazw. Właściwość Subscribers reprezentuje kolekcję obiektów Subscriber, które będą trwale przechowywane w bazie danych. Dla współpracy z bazą danych SQL Server Compact Entity Framework trzeba skonfigurować. Domyślnie Entity Framework łączy się z serwerem instalacji SQL Express. Umożliwienie współpracy Entity Framework z bazą danych SQL Server Compact wymaga zainstalowania pakietu o nazwie EntityFramework.SqlServerCompact. Oto wymagane kroki: 1. Upewnij się, że jesteś podłączony do Internetu. 2. Zaznacz katalog References, otwórz PPM menu kontekstowe i wybierz opcję Manage NuGetPackages. 3. Pojawi się okno dialogowe. W jego lewym okienku wybierz zakładkę Online, a w prawym, w polu wyszukiwania, wpisz EntityFramework.SqlServerCompact. 9
11 4. W środkowej części okna powinien pojawić się poszukiwany pakiet (najlepiej wskazać wersję wyższą). Zainstaluj go, klikając przycisk Install. Jeśli pakiet jest już w systemie zainstalowany, to przycisk Install jest niewidoczny. Zainstalowany pakiet zostanie automatycznie dodany do projektu i wygeneruje odpowiedni kod konfigurujący pracę EntityFramework z bazami SqlServerCompact. Zdefiniowany model domenowy został wytworzony według podejścia Code First: najpierw została zaimplementowana w kodzie klasa modelu, a następnie poprzez kontekst dostępu do danych utworzona zostanie odpowiednia tabela w bazie danych. Utworzenie kontrolera Subscriber Kontrolerzy stanowią centralną część architektury MVC. Pośredniczą między działaniami użytkownika a danymi zawartymi w modelu. Zgodnie z konwencją przyjętą we Frameworku ASP.NET MVC 4 obowiązują dwie podstawowe reguły dotyczące kontrolerów: Nazwa klasy kontrolera jest zakończona przyrostkiem Controller. Wybór kontrolera odbywa się na podstawie nazwy klasy. Aby dodać do projektu kontroler Subscriber, należy wykonać następujące kroki: 1. Zaznacz katalog Controllers, otwórz PPM menu kontekstowe i wybierz Add/Controller 2. W nowym oknie dialogowym Add Controller w polu Controller name wpisz SubscriberController,a w polu Scaffolding option wybierz szablon Empty MVC contro ller rys.8. Kliknij Add. 10
12 Rys.8. Utworzony kontroler posiada na razie jedną akcję Index, która zwraca jedynie widok rys.9. Rys.9. Zadaniem tego kontrolera jest zapisywanie danych w bazie danych i odczytywanie ich. Aby umożliwić kontrolerowi dostęp do bazy danych, należy zdefiniować obiekt kontekstu SubscriptionContext oraz zainicjalizować go w konstruktorze kontrolera listing 3. Listing 3. Kod klasy kontrolera Subscriber using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcApplicationSubskrybcja.Models; namespace MvcApplicationSubskrybcja.Controllers public class SubscriberController : Controller private SubscriptionContext _db = new SubscriptionContext(); public SubscriberController() _db = new SubscriptionContext(); public ActionResult Index() ViewBag.Message = "Witaj w serwisie Subskrypcja!"; return View(); 11
13 Zadaniem tego kontrolera jest Klasa SubscriptionContext została zdefiniowana w aplikacji w przestrzeni nazw MvcApplicationSubskrybcja.Models i aby kompilator mógł utworzyć obiekt tej klasy należy dodać wpis: using MvcApplicationSubskrybcja.Models; Po zdefiniowaniu i zainicjalizowaniu w kontrolerze Subscriber obiektu klasy kontekstowej pozwalającego na połączenie z bazą danych można zaimplementować akcję, które będą zapisywać dane oraz odczytywać z bazy danych. Pierwsza z nich List- pobiera listę subskrybentów i przekazuje do widoku wyświetlającego listę na stronie listing 4. Listing 4. Akcja List kontrolera Subscriber public ActionResult List() // Pobranie listy subskrybentów i wyświetlenie ich w widoku var subscribers = _db.subscribers; return View(subscribers); Akcja Subscribe zawiera dwie metody: pierwsza ma reagować na żądania GET, a druga, opatrzona atrybutem [HttpPost] na żądania POST. Kod akcji Subscribe przedstawiono na listingu 5. Również akcja Unsubscribe zawiera dwie metody reagujące na żądania GET i POST listing 6. Listing 5. Akcja Subscribe kontrolera Subscriber. public ActionResult Subscribe() return View(); [HttpPost] public ActionResult Subscribe(Subscriber model) // Sprawdzenie, czy model jest poprawny if (ModelState.IsValid) try // Pobranie subskrybenta o podanym w modelu adresie w celu sprawdzenia, // czy na ten adres została już zarejestrowana subskrypcja var subscriber = _db.subscribers.firstordefault(u => u. .equals(model. )); if (subscriber == null) // Jeżeli nie znaleziono subskrybenta, to //można go zarejestrować. subscriber = model; subscriber.registrationdate = DateTime.Now; _db.subscribers.add(subscriber); _db.savechanges(); // Dodanie subskrybenta do bazy danych i //zapisanie zmian else 12
14 // Jeżeli subskrybent o podanym adresie został //znaleziony, to wyświetlany jest błąd. TempData["Error"] = "Taki adres jest już zarejestrowany."; return View(model); catch TempData["Error"] = "Coś poszło nie tak!"; return View(); // Jeżeli wszystko zostało wykonane poprawnie, użytkownik zostanie // przeniesiony na stronę główną z komunikatem. TempData["Message"] = "Adres został zapisany."; return RedirectToAction("Index"); else // Jeżeli model nie jest poprawnie wypełniony, użytkownik pozostanie //na stronie wprowadzania danych. return View(model); Listing 6. Akcja Unsubscribe kontrolera Subscriber public ActionResult Unsubscribe() return View(); [HttpPost] public ActionResult Unsubscribe(Subscriber model) // Sprawdzenie, czy model jest poprawny if (ModelState.IsValid) try // Pobranie subskrybenta o podanym w modelu adresie , //imieniu i nazwisku var subscriber = _db.subscribers.firstordefault(u => (u. .equals(model. ) && u.name.equals(model.name) && u.surname.equals(model.surname))); if (subscriber!= null // Jeżeli subskrybent zostanie znaleziony, to jest usuwany, a // zmiany są zapisywane. _db.subscribers.remove(subscriber); _db.savechanges(); Else // Jeżeli subskrybent nie zostanie odnaleziony, to użytkownik //pozostanie na stronie wprowadzania danych. 13
15 TempData["Error"] = "Subskrypcja o takich danych nie istnieje. Popraw dane i spróbuj jeszcze raz."; return View(model); catch TempData["Error"] = "Coś poszło nie tak!"; return View(); // Jeżeli wszystko zostało wykonane poprawnie, użytkownik zostanie // przeniesiony na stronę główną z komunikatem. TempData["Message"] = "Pomyślnie usunięto adres !"; return RedirectToAction("Index"); else return View(model); Akcje Subscribe I Unsubscribe reagujące na żądanie GET zwracają jedynie odpowiedni widok. Więcej skomplikowane operacje wykonują natomiast akcje wywoływane przez żądanie POST. Akcja Subscribe kolejno: 1. Waliduje otrzymany z widoku model. 2. W przypadku gdy walidacja się powiedzie, sprawdza, czy podany adres jest już w bazie danych. Jeżeli podany adres nie zostanie znaleziony w bazie danych, to zapisuje w bazie danych dane wprowadzone przez użytkownika i przenosi go na stronę główną z komunikatem o zapisaniu subskrypcji. Jeżeli wprowadzony adres zostanie w bazie danych znaleziony( co oznacza, że została już wcześniej dokonana subskrypcja), to informuje o tym fakcie użytkownika. 3. W przypadku gdy walidowany model przekazany z widoku jest niepoprawny, wywołuje aktualny widok z listą błędów. Akcja Unsubscribe działa w analogiczny sposób: 1. Waliduje otrzymany z widoku model. 2. W przypadku gdy walidacja się powiedzie, sprawdza, czy podane dane są zapisane w bazie danych (czy wcześniej została dokonana subskrypcja). Jeżeli dane zostaną odnalezione w bazie danych, to usuwa je i przenosi użytkownika na stronę główną z komunikatem o usunięciu danych z bazy. Jeżeli dane wprowadzone przez użytkownika nie zostaną odnalezione w bazie danych, to informuje o tym użytkownika. 3. W przypadku gdy walidowany model przekazany z widoku jest niepoprawny, wywołuje aktualny widok z listą błędów. Zarówno w akcji Subscribe, jak i Unsubscribe wyszukiwanie danych subskrybenta odbywa się poprzez zapytanie LINQ. Entity Framework konwertuje zapytanie LINQ na odpowiednie polecenia SQL potrzebne do pobrania danych z bazy danych SQL Server Compact.Po utworzeniu kontrolera Subscriber można uruchomić aplikacje (CTRL+F5) i wywołać jedną z akcji. W tym należy wpisać w 14
16 przeglądarce adres URL w postaci (port może być innym).w odpowiedzi użytkownik otrzyma komunikat o błędzie (rys 10), bo nie może odszukać widoku. W celu wyeliminowania tego błędu trzeba dodać widoki do akcji kontrolera Subscriber. Rys.10. Komunikat o błędzie, gdy Framework nie odnajdzie odpowiedniego widoku do wyświetlenia. Dodanie widoków dla kontrolera Subscriber Widoki przechowywane są w katalogu Views. Każdy kontroler posiada w tym katalogu swój podkatalog. Dodanie widoków dla kontrolera Subscriber rozpoczynamy od utworzenia podkatalogu w katalogu Views. Zrealizuj następne kroki: 1. Zaznacz katalog Views, otwórz PPM menu kontekstowe i wybierz Add/New Folder. Zmień nazwę nowo utworzonego katalogu na Subscriber. 2. Zaznacz katalog Subscriber, otwórz PPM menu kontekstowe i wybierz Add/ View 3. W otwartym oknie dialogowym w polu Name wpisz nazwę Index. 4. Opcję Create a strongly-typed view oraz Create as a partial view pozostaw odznaczone. 5. Zaznacz opcję Use a layout or master page, ale pole pozostaw puste rys Kliknji Add. 15
17 Rys.11. Dodawanie nowego widoku. Utworzony w ten sposób plik Index.cshtml jest widokiem nietypizowanym. Oznacza to, że widok nie jest powiązany z żadnym modelem. Do nowego widoku należy wpisać kod przedstawiony na listingu 7. Kod ten wykorzysta tagi HTML dla definicji trzech odnośników, które umożliwią dodanie i usuniecie subskrypcji oraz wyświetlenie listy subskrybentów. Listing 7. Zawartość pliku ViewBag.Title = featured <section class="featured"> <div class="content-wrapper"> <hgroup class="title"> <h1>@viewbag.message</h1> </hgroup> </section> <h2>wybierz opcję:</h2> <p> <a href="/subscriber/subscribe">dodaj subskrypcję</a> 16
18 </p> <p> <a href="/subscriber/unsubscribe">usuń subskrypcję</a> </p> <p> <a href="/subscriber/list">lista subskrypcji</a> </p> Po uruchomieniu aplikacji i wpisaniu w przeglądarce adresu URL zostanie wyświetlona strona przedstawiona na rys. 12. Rys.12. Strona Index kontrolera Subscriber. Ponieważ pozostałe widoki nie zostały jeszcze wygenerowane, to po wybraniu którejś z opcji będzie wyświetlony komunikat błędu podobny rys.10. Oprócz widoku Index należy dodać jeszcze trzy widoki : Subscribe, Unsubscribe, Unsubscribe oraz List. Dla stworzenia widoku Subscribe zrealizuj następne kroki: 1. W folderze Views zaznacz katalog Subscriber, otwórz PPM menu kontekstowe i wybierz Add/ View W rezultacie pojawi się okno dialogowe Add View. 2. W oknie dialogowym Add View w polu Name wpisz nazwę Subscribe. 3. Zaznacz opcję Create a strongly-typed view i z listy rozwijanej Model class wybierz model Subscriber z przestrzeni nazw MvcApplicationSubskrybcja.Models, a z listy rozwijanej Scaffold template wybierz opcję create rys
19 Rys.13. Dodawanie widoku Subscribe. 4. Opcję Create as a partial view pozostaw odznaczoną. 5. Zaznacz opcję Use a layout Or master page, ale pole poniżej pozostaw puste. 6. Kliknij Add. 7. Zmodyfikuj kod widoku zgodnie s listingiem 8. Listing 8. Zawartość pliku ViewBag.Title = "Dodaj subskrypcję"; <h2>dodaj subskrypcję <fieldset> <legend>subskrybent</legend> <div => model.name) 18
20 <div => => model.name) <div => model.surname) <div => => model.surname) <div => model. ) <div => => model. ) <p> <input type="submit" value="zapisz" /> </p> </fieldset> Analizując kod listingu 8, można zauważyć, że został wygenerowany formularz, który pozwala dodać dane subskrybenta. Kod widoku składa się z kodu C# oraz tagów HTML. Na początku strony został wskazany model, z którego widok korzysta został utworzony widok typizowany. W analizowanym przykładzie użyte zostały metody pomocnicze HTML (Helpers) => model. ) "Index"). Ich zadaniem jest generowanie kodu HTML dostosowanego do przeglądarki, w której strona jest wyświetlana. Klasa Helpers posiada metody zwracające ciąg kodu HTML na podstawie wskazanych parametrów. Po uruchomieniu aplikacji i wpisaniu adresu URL użytkownik otrzyma formularz. Zauważmy, że nad polami są wyświetlone nazwy pół modelu (rys.14). Aby zmienić wyświetlone napisy, wystarczy zamienić => model.name) na napis Imię, ale taką zmianę trzeba by było wprowadzić w każdym widoku, który korzysta z tego modelu. Lepszym rozwiązaniem jest umieszczenie wyświetlanych nazw w klasie modelu. Oprócz nazw do wyświetlania w modelu można także umieścić elementy walidacji wprowadzonych danych (na przykład adresu ). Do walidacji danych i wyświetlania nazw użyjemy mechanizmu adnotacji danych DataAnnotations. 19
21 Rys.14. Formularz dodawania subskrypcji. W celu wykorzystania mechanizmu adnotacji danych należy zmodyfikować klasę modelu domenowego Subscriber, która umieszczona jest w katalogu Models. Walidacje wprowadzonych danych realizujemy przy pomocy atrybutów StringLength oraz RegularExpression. Do zapewnienia, że wszystkie pola zostaną uzupełnione, wykorzystany zostanie atrybut Required, a do wyświetlania nazwy pola atrybut Displey. Uzupełniony o atrybuty model przedstawiono na listingu 9. Listing 9. Model Subscriber uzupełniony o atrybuty walidacji i wyświetlania. using System; using System.ComponentModel.DataAnnotations; namespace MvcApplicationSubskrybcja.Models public class Subscriber [ScaffoldColumn(false)] public long Id get; set; [StringLength(50, ErrorMessage = "Imię może mieć maksymalnie 50 znaków")] [Required(ErrorMessage = "Imię jest wymagane.")] [Display(Name = "Imię")] public string Name get; set; [Required(ErrorMessage = "Nazwisko jest wymagane.")] [StringLength(50, ErrorMessage = "Nazwisko może mieć maksymalnie 50 znaków.")] [Display(Name = "Nazwisko")] public string Surname get; set; 20
22 [StringLength(100, ErrorMessage = "Adres może mieć maksymalnie 100 znaków.")] [Required(ErrorMessage = "Adres jest wymagany.")] [Display(Name = "Adres ")] [RegularExpression(@"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9- ]+)*(\.[a-z]2,4)$", ErrorMessage = "Adres jest niepoprawny.")] public string get; set; [Display(Name = "Data rejestracji")] [DataType(DataType.DateTime)] public DateTime RegistrationDate get; set; Po ponownym uruchomieniu aplikacji i wywołaniu adresu URL użytkownik zobaczy zdefiniowane w modelu nazwy pół, a przy próbie napisania niepoprawnego adresu lub nazwiska otrzyma komunikat błędu walidacji rys. 15. Rys. 15. Komunikat błędu walidacji. Dla stworzenia widoku Unsubscribe trzeba zrealizować podobne czynności: 1. W folderze Views zaznacz katalog Subscriber, otwórz PPM menu kontekstowe i wybierz Add/ View W rezultacie pojawi się okno dialogowe Add View. 2. W oknie dialogowym Add View w polu Name wpisz nazwę Unsubscribe. 3. Zaznacz opcję Create a strongly-typed view i z listy rozwijanej Model class wybierz model Subscriber z przetrzeni nazw MvcApplicationSubskrybcja.Models a z listy rozwijanej Scaffold template wybierz opcję create rys. 21
23 Rys.16. Dodawanie widoku Unsubscribe 4. Opcję Create as a partial view pozostaw odznaczoną. 5. Zaznacz opcję Use a layout Or master page, ale pole poniżej pozostaw puste. 6. Kliknij Add. 7. Zmodyfikuj kod widoku zgodnie s listingiem 10. Listing 10. Zawartość pliku ViewBag.Title = "Usunięcie subskrypcji"; <h2>usunięcie <fieldset> <legend>subskrybent</legend> <div => model.name) 22
24 <div => => model.name) <div => model.surname) <div => => model.surname) <div => model. ) <div => => model. ) <p> <input type="submit" value="usuń" /> </p> </fieldset> W kontrolerze Subscriber w akcjach Subscribe oraz Unsubscribe (listingi 5 oraz 6) zaimplementowano również obsługę błędów. Komunikaty błędów wpisywane są do obiektu TempData, jednak nie są one wyświetlane w interfejsie użytkownika. Zawartość tego obiektu lepiej wyświetlać na stronie wzorcowej. Strona wzorcowa plik o nazwie _Layout.cshtml umieszczona jest w katalogu Shared. W kodzie tej strony wystarczy dopisać kod wyświetlający zawartość elementu TempData. W ten sposób zostanie zaimplementowany mechanizm informujący o wykonanych działaniach lub błędach. Kod wyświetlający komunikaty trzeba umieścić przed - listing 11. Listing 11. Dodanie obsługi komunikatów do strony wzorcowej. <div required: false) <section class="content-wrapper main-content clear-fix"> <h3>@tempdata["error"]</h3> </section> 23
25 Teraz zarówno przy próbie dodania subskrypcji z adresem , który został już zarejestrowany, jak i przy próbie usunięcia subskrypcji danych, które jeszcze nie zostali zarejestrowane, użytkownik zostanie o tym poinformowany rys. 17 Rys. 17 Komunikat błędu. Ostatnim widokiem, jaki należy umieścić w katalogu Subscriber, jest strona wyświetlająca subskrybentów. Widok dodawany jest w taki sam sposób jak poprzednie widoki Subscribe oraz Unsubscribe, z tą różnicą, że z listy rozwijanej Staffold template wybieramy teraz opcję list rys.18. Po uruchomieniu aplikacji i wpisaniu w przeglądarce URL użytkownik otrzyma tabelę z danymi subskrybentów rys. 19. Warto zauważyć, że nagłówki kolumn w tabeli są dokładnie takie, jak zostały zdefiniowane w modelu przy użyciu mechanizmu adnotacji danych. 24
26 Rys. 18. Dodawanie widoku List. Rys. 19. Lista subskrybentów. Modyfikacja routingu oraz dostosowanie strony wzorcowej W katalogu App_Start w pliku RouteConfig.cs zdefiniowana jest domyślna trasa uruchomiająca kontroler domyślny Home oraz akcję Index tego kontrolera. Kod trzeba zmodyfikować tak, aby strona Index kontrolera Subscriber była domyślną listing 12. Kolejną niezbędną czynnością jest 25
27 usunięcie z aplikacji kontrolera Home oraz podkatalogu Home z folderu Home oraz podkatalogu Home z folderu Views. Listing 12. Definicja domyślną trasy routingu. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MvcApplicationSubskrybcja public class RouteConfig public static void RegisterRoutes(RouteCollection routes) routes.ignoreroute("resource.axd/*pathinfo"); routes.maproute( name: "Default", url: "controller/action/id", defaults: new controller = "Subscriber", action = "Index", id = UrlParameter.Optional ); Usunięcie kontrolera i widoków Home spowoduje, że nie będą aktywne odnośniki Home,About oraz Contact, a także Your logo here umieszczone domyślnie na stronie wzorcowej _Layout.cshtml. Odnośniki Home, About oraz Contact należy usunąć, a w miejsce Your logo here wpisać tekst Serwis Subskrypcja. Po kliknięciu na ten tekst użytkownik będzie przenoszony na stronę / Subscriber/Index. Należy zmodyfikować również stopkę strony wzorcowej: napis My ASP.NET MVC Application zastąpić napisem Aplikacja wykonana w ASP.NET MVC 4. Zmienić można także tekst w tagu Title. Ostateczny wygląd kodu pliku _Layout.cshtml jest pokazany w listingu 13. Listing 13. Zmodyfikowany kod pliku _Layout.cshtml. <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>@viewbag.title - Serwis Subskrypcja</title> <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <meta name="viewport" </head> <body> <header> <div class="content-wrapper"> <div class="float-left"> 26
28 <p Subskrypcja", "Index", "Subscriber")</p> <div class="float-right"> <section </section> </header> <div required: false) <section class="content-wrapper main-content clear-fix"> @RenderBody() </section> <footer> <div class="content-wrapper"> <div class="float-left"> - Aplikacja wykonana w ASP.NET MVC required: false) </body> </html> Dodanie modelu Newsletter Pierwszym krokiem przy implementacji funkcji z wysyłaniem newslettera jest dodanie modelu Newsletter w postaci klasy. Klasa Newsletter będzie modelem wejściowym, co oznacza że będzie do przygotowania odpowiedniej struktury danych pozwalającej na przesłanie danych z widoku do kontrolera. Klasę Newsletter należy dodać analogicznie jak klasę Subscriber i umieścić w katalogu Models. Zawartość pliku z klasą Newsletter.cs jest pokazana w listingu 14. Listing 14. Zawartość pliku Newsletter.cs using System.ComponentModel.DataAnnotations; namespace MvcApplicationSubskrybcja.Models public class Newsletter [Required(ErrorMessage = "Temat jest wymagany.")] [Display(Name = "Temat")] [StringLength(20, ErrorMessage = "Temat może mieć maksymalnie 20 znaków.")] public string Subject get; set; 27
29 [Required(ErrorMessage = "Treść jest wymagana.")] [Display(Name = "Treść")] [StringLength(200, ErrorMessage = "Treść może mieć maksymalnie 200 znaków.")] public string Content get; set; Skompiluj projekt, wybierając z menu BUILD/Build Solution. Analizując kod listingu 14, można zauważyć, że przy definiowaniu modelu został użyty mechanizm adnotacji danych DataAnnotations. Wykorzystane zostały atrybuty do zdefiniowania wymagalności wypełnienia poła, ograniczenia długości wprowadzonego tekstu, a także wyświetlania jego nazwy. Model Newsletter jest modelem wejściowym, więc dane newslettera w postaci tematu i treści nie bsdą zapisywane w bazie danych. Z tego powodu niema potrzeby definiować zbioru DbSet<Newsletter> Newsletters w klasie kontekstowej, ponieważ właściwość Newsletters służy do zapamiętywania i pobierania z bazy danych informacji o obiektach Newsletter. Po utworzeniu modelu Newsletter można przejść do implementacji kontrolera wysyłającego newsletter subskrybentom. Utworzenie kontrolera Newsletter Kontroler Newsletter należy dodać do katalogu Controllers, analogicznie jak kontroler Subscriber. Oto są następne kroki(rys.20): 1. Zaznacz katalog Controllers, otwórz PPM menu kontekstowe i wybierz Add/Controller 28
30 2. W nowym oknie dialogowym Add Controller w polu Controller name wpisz NewletterController, a w polu Scaffolding option rozwiń listę i wybierz szablon Emty MVC contro ller. 3. Zatwierdź ustawienia, klikając Add. 4. Uzupełnij kontroler zgodnie z listingiem 15. Listing 15. Kod kontrolera Newsletter (plik Newsletter.cs) using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using MvcApplicationSubskrybcja.Models; using MvcApplicationSubskrybcja.Helpers; namespace MvcApplicationSubskrybcja.Controllers //[Authorize(Roles = "Administrator")] public class NewsletterController : Controller private SubscriptionContext _db = new SubscriptionContext(); public NewsletterController() _db = new SubscriptionContext(); public ActionResult Send() return View(); [HttpPost] public ActionResult Send(Newsletter news) if (ModelState.IsValid) // Pobranie wszystkich subskrybentów var subscribers = _db.subscribers; // Utworzenie listy adresów subskrybentów List<string> s = subscribers.select(u => u. ).tolist(); if ( s.count > 0) // Wykorzystanie helpera do wysyłania i MailHelper.Send ( s, news.subject, news.content); return View("Sent"); else TempData["Error"] = "Brak aktywnych użytkowników. Newsletter nie został wysłany."; return View(); 29
31 // W przypadku błędów zwrócenie aktualnego widoku return View(news); W tym kodzie na razie są jeszcze nie wyznaczone przestrzeń nazw MvcApplicationSubskrybcja.Helpers z klasą MailHelper, którzy będą zdefiniowane później. Zaimplementowany konstruktor klasy NewsletterController inicjuje połączenie z bazą danych tak, aby było możliwe pobranie listy subskrybentów. Akcja Send posiada dwie metody odpowiadające dwóm typom żądania URL: GET i POST. Pierwsza akcja (GET) wyświetla jedynie odpowiedni widok, a druga (POST) wykonuje następujące kroki: 1. Waliduje otrzymany z widoku model. 2. W przypadku, gdy walidacja się powiedzie, pobiera aktywnych i potwierdzonych subskrybentów. 3. Jeżeli lista subskrybentów nie jest pusta, wysyła newsletter i zwraca widok Sent; w przeciwnym przypadku użytkownik otrzyma odpowiedni komunikat. 4. W przypadku gdy walidowany model przekazany z widoku jest niepoprawny, wywołuje aktualny widok z listą błędów. Za listę komunikatów błędów odpowiedzialny jest model Newsletter zdefiniowany w listingu 14. Samo wysłanie newslettera następuje przy wykorzystaniu helpera MailHelper. Oto kroki wymagane do jego utworzenia: 1. Zaznacz projekt MvcApplicationSubskrybcja, otwórz PPM menu kontekstowe i wybierz Add/New Folder. Zmień nazwę nowego katalogu na Helpers. 2. Otwórz PPM menu kontekstowe katalogu Helpers i wybierz ścieżkę Add/New Item 3. W nowym oknie dialogowym Add New Item wybierz obiekt Class, a w polu Name wpisz MailHelper. Zatwierdź ustawienia przyciskiem Add. 4. Dodany plik MailHelper.cs wypełnij kodem przedstawionym na listingu 16. Listing 16. Kod pomocnika MailHelper (plik MailHelper.cs) using System.Collections.Generic; using System.Net; using System.Net.Mail; using System.Text; namespace MvcApplicationSubskrybcja.Helpers public static class MailHelper private static SmtpClient _smtpclient; static MailHelper() 30
32 _smtpclient = new SmtpClient(); public static void Send (List<string> recipientaddress, string subject, string news) using (MailMessage mail = new MailMessage()) mail.from = new MailAddress("SerwisSubskrypcja@gmail.com", "Subskrypcja", Encoding.UTF8); foreach (string adres in recipientaddress) mail.bcc.add(new MailAddress(adres)); mail.subject = subject; mail.body = news; mail.subjectencoding = Encoding.UTF8; mail.bodyencoding = Encoding.UTF8; mail.priority = MailPriority.High; _smtpclient.send(mail); Aby móc wykorzystać metodę z helpera Mailhelper, należy mieć konto pocztowe. W podanym przykładzie jest wykorzystane konto pocztowe Gmail.com. Dane konfiguracyjne tego konta trzeba umieścić w pliku Web.config, listing 17. Listing 17. Konfiguracja serwera pocztowego w pliku Web.config. <system.net> <mailsettings> <smtp> <network host="smtp.gmail.com" port="587" username="serwissubskrypcja@gmail.com" password="qwer.1234" enablessl="true" /> </smtp> </mailsettings> </system.net> Po utworzeniu kontrolera i odpowiednim skonfigurowaniu serwera pocztowego trzeba wygenerować widoki, z których będzie korzystał kontroler Newsletter. Dodanie widoków dla kontrolera Newsletter Analizując listing 15 z akcją Send, można zauważyć, że kontroler Newsletter korzysta z widoków Send oraz Sent. Zgodnie z konwencją oba widoki muszą być umieszczone w folderze o nazwie Newsletter w katalogu Views. Należy utworzyć katalog Newsletter, a następne dodać do niego widok Send. Oto wymagane czynności: 1. Zaznacz katalog Newsletter, otwórz PPM menu kontekstowe i wybierz Add/View 31
33 2. Wpisz nazwę Send i zazanać opcję Create a strongly-typed view. 3. Wybierz model Newsletter (MvcApplicationSubskrybcja.Models), a z listy rozwijanej w Scaffold template wybierz opcję Create. 4. Zaznacz opcję Use a layout or masterpage, ale pole poniżej pozostaw puste. 5. Zatwierdź ustawienia, klikając Add. W ten sposób wygenerowany zostanie widok typizowany do wysłania newslettera. Teraz warto zmienić wygląd strony, wykorzystując nazwy w języku polskim, a także zmienić sposób wyświetlania okienek do wprowadzania tekstu tematu i treści newslettera. Dzięki zastosowaniu helperów HTML Html.TextAreaFor oraz TextBoxFor można sterować rozmiarem okienek do wprowadzenia tekstu. Ostateczny wygląd kodu jest pokazany w listingu 18. Listing 18. Kod widoku Send (plik ViewBag.Title = "Wyślij newsletter"; <h2>wyślij <fieldset> <legend>newsletter</legend> <div => model.subject) <div => model.subject, new style = "width: 370px;" => model.subject) <div => model.content) <div => model.content, new rows = 10, style = "width: 370px;" => model.content) <p> <input type="submit" value="wyślij" /> </p> </fieldset> "Index", "Subscriber") 32
34 @section Po uruchomieniu aplikacji I wpisaniu w przeglądarce adresu URL pojawi się strona umożliwiająca wysłanie wiadomości rys. 21. Po wpisaniu tematu (np.ado.net) i treści(np. DataSet) oraz kliknięciu przycisku Wyślij newsletter zoztaje wysłany oraz subskrybenci otrzymają komunikaty rys.22. Jeśli lista subskrybentów jest pusta, to wyświetlany jest stosowny komunikat. Po poprawnym wysłaniu newslettera użytkownik zostanie przekserowany na stronę ze stosowną informacją. Rys. 21. Strona do wysyłania newslettera. 33
35 Rys.22 komunikat od serwisu. Widok odpowiedzialny za wyświetlenie komunikatu po poprawnym wysłaniu newslettera Sentnie został jeszcze utworzony. Dla stworzenia tego widoku są niezbędne następne kroki: 1. Zaznacz katalog Newsletter, otwórz PPM menu kontekstowe i wybierz Add/View 2. Wpisz nazwę Sent. 3. Opcie Create a strongly-type view oraz Create as partial view pozostaw odznaczone. 4. Zaznacz opcję Use a layount page, ale pole poniżej pozostaw puste. 5. Zatwierdź ustawienia klikając Add. 6. Dodany widok uzupełnij zgodnie z listingiem 19. Listing 19. Kod widoku Sent. (plik ViewBag.Title = "Newsletter został wysłany"; <h2>newsletter został do strony głównej", "Index", "Subscriber") Utworzony widok nie jest widokiem typizowanym, czyli jest niepowiązany z modelem. Komunikat pro wysyłanie jest pokazany na rys. 23. Rys. 23 komunikat pro wysyłanie newslettera. 34
36 Utworzenie użytkownika Administrator Administrator musi mieć specjalne funkcjonalności: logowanie się, wysyłanie newslettera, wysyłanie listy subskrybentów. Istnienie Administratora i przeznaczonych dla niego działań wymaga wprowadzenia mechanizmów uwierzytelniania oraz autoryzacji użytkownika. Te mechanizmy są zapewniane przez bibliotekę SimpleMembership. Wykorzystanie SimpleMembership pozwoli w prosty sposób utworzyć konto i rolę Administrator oraz dodać obsługę uwierzytelniania i autoryzacji użytkownika. Funkcjonalność rejestrowania i logowania się użytkowników została automatycznie dodana wraz z utworzeniem projektu. Odpowiada za nią kontroler Account, modele zdefiniowane w pliku AccountModels.cs oraz atrybut InitializeSimpleMembership, który zaimplementowany jest w pliku Filters\InitializeSimpleMemdershipAtribute.cs. W aplikacji MvcApplicationSubskrybcja dane dotyczące użytkownika Administrator oraz jego roli, a także hasła przechowywane będą w bazie danych, która została już dodana do aplikacji - SerwisSubskrypcja.sdf. Aby było to możliwe, należy zmodyfikować domyślną definicję połączenia z lokalną bazą zawartą w pliku Web.config listing 20. Modyfikacja sekcji connectionstring jest pokazana w listingu 21. Listing 20 domyślna definicja połączenia z lokalną bazą danych (sekcja connectionstring w pliku Web.config) <connectionstrings> <add name="defaultconnection" connectionstring="data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcApplicationSubskrybcja ; Integrated Security=SSPI;AttachDBFilename= DataDirectory \aspnet- MvcApplicationSubskrybcja mdf" providername="system.data.sqlclient" /> </connectionstrings> Listing 21 modyfikacja sekcji connectionstring w pliku Web.config. <connectionstrings> <add name="defaultconnection" connectionstring="data Source= DataDirectory SerwisSubskrypcja.sdf" providername="system.data.sqlserverce.4.0" /> </connectionstrings> Po zmodyfikowaniu konfiguracji połączenia z BD należy bazę zainicjować, aby mechanizm SimpleMembership stworzył odpowiednie tablicy do przechowywania danych użytkowników oraz ich ról, a następne zaimplementować utworzenie konta i roli Administratora. Konto użytkownika i rolę należy utworzyć tylko raz, przy starcie aplikacji wykorzystując zdarzenie Application_Start() (z pliku Global.asax.cs). Domyślnie w zdarzeniu Application_Start() wywoływane są miedzy innymi : rejestracja tras routingu, rejestracja filtrów globalnych oraz inne elementy. Oprócz tych domyślnych elementów wywołana zostanie funkcja inicjalizująca bazę danych oraz tworząca użytkownika i rolę Administrator. Oto wymagane kroki: 1. Do katalogu App_Start dodaj nowa klasę o nazwie InitializeMembership. 35
37 2. Do Utworzonej klasy InitializeMembership wpisz kod zgodnie z listingiem 22. Listing 22. Definicja klasy InitializeMembership (plik InitializeMembership.cs) using System.Configuration; using System.Linq; using System.Web.Security; using WebMatrix.WebData; namespace MvcApplicationSubskrybcja public static class InitializeMembership public static void SeedMembership() WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autocreatetables: true); string rolename = ConfigurationManager.AppSettings["AdminRole"]; string username = ConfigurationManager.AppSettings["AdminLogin"]; string password = ConfigurationManager.AppSettings["AdminPassword"]; // Utworzenie roli "Administrator", jeśli nie istnieje if (!Roles.RoleExists(roleName)) Roles.CreateRole(roleName); // Utworzenie użytkownika "Administrator", jeśli nie istnieje if (!WebSecurity.UserExists(userName)) WebSecurity.CreateUserAndAccount(userName, password); // Dodanie użytkownika "Administrator" do roli "Administrator" if (!Roles.GetRolesForUser(userName).Contains(roleName)) Roles.AddUsersToRoles(new[] username, new[] rolename ); 3. W zdarzeniu Application_Start () znajdującym w pliku Global.asax.cs wywolaj funkcję SeedMembership () z klasy InitializeMembership: InitializeMembership.SeedMembership(); 4. W pliku konfiguracyjnym Web.config włącz mechanizm SimpleMembership poprzez umieszczenie wpisu <add key="enablesimplemembership" value="true" /> pod tagiem <appsettings>. Do utworzenia konta potrzebne są nazwa użytkownika, hasło oraz . Te dane można pobrać w pliku Web.config (listing 23), a ich wartości pobrać w implementowanej funkcji SeeMembership. Listing 23. Definicja danych potrzebnych do utworzenia konta Administrator. <appsettings>... <add key="adminrole" value="administrator" /> <add key="adminlogin" value="administrator" /> <add key="adminpassword" value="qwer.1234" /> </appsettings> 36
38 W zaimplementowanej funkcji SeedMembership() (listing 22) w klasie InitialMembership najpierw inicjalizowana jest baza danych (WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autocreatetables: true); ). Następne tworzone są rola i użytkownik o nazwie Administrator (pod warunkiem, że taka rola i użytkownik jeszcze nie istnieją). Ostatnim krokiem jest nadanie użytkownikowi Administrator roli Administrator (jeśli jeszcze jej nie posiada). Po utworzeniu Administratora systemu trzeba zmodyfikować domyślnego modelu oraz kontrolera, który umożliwi logowanie się do serwisu. Należy również zmodyfikować utworzoną wcześniej funkcjonalność wysyłania newslettera oraz przeglądania listy subskrybentów tak, aby pewne działania mógł wykonywać tylko zalogowany Administrator. Utworzenie modelu Administrator Dla utworzenia modelu realizuj następne czynności: 1. Dodaj nową klasę Administrator do katalogu Models. 2. Zmodyfikuj kod modelu zgodnie z listingiem 24. Listing 24. Klasa modelu Administrator (plik Administrator.cs) using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity; using System.Globalization; using System.Web.Security; namespace MvcApplicationSubskrybcja.Models public class Administrator [Required] [Display(Name = "Nazwa użytkownika")] public string UserName get; set; [Required] [DataType(DataType.Password)] [Display(Name = "Hasło")] public string Password get; set; [Display(Name = "Zapamiętaj")] public bool RememberMe get; set; Po utworzeniu modelu należy zmodyfikować kontroler, który będzie z tego modelu korzystał. Utworzenie kontrolera Administrator W katalogu Controller znajduje się plik AccountController, który został automatycznie dodany przy tworzeniu aplikacji. Odpowiada on za rejestrację i logowanie użytkowników. Projekt przewiduje tylko logowanie Administratora, dlatego ten kontroler i zaimplementowane w nim domyślnie akcje nadadzą się do wymaganej funkcjonalności. W pierwszym kroku należy zmienić nazwę pliku i kontrolera na AdministratorController. Następne trzeba usunąć z kontrolera zbędne akcje Register, Disassociate, Manage, ExternalLogin, ExternalLoginCallback, ExternalLoginConfirmation, ExternalLoginFailure, ExternalLoginsList, 37
39 RemoveExternalLogins oraz enumerator ManageMessageID, a także klase ExternalLoginResult i metodę ErrorCodeToString. Wymienione funkcje można usunąć, ponieważ projekt zakłada, że Administrator może się jedynie logować się I wylogować z systemu. Pozostałe akcji, Login, LogOff, oraz RedirectToLocal, należy zostawić, ale można zmodyfikować komunikat informujący o błędzie w akcji Login oraz nazwę kontrolera, do którego ma zostać przekazane sterowanie po poprawnym wylogowaniu się użytkownika (z Home na Subscriber). Należy zauważyć, że akcja Login obsługująca żądanie typu POST korzysta z modelu LoginModel, który w aplikacji został już zamieniony na Administrator, dlatego również w kontrolerze taka zmianę należy uwzględnić. Ostatnim krokiem modyfikacji kontrolera Administrator jest usunięcie atrybutu [InitializeSimpleMembership], którym opatrzony jest cały kontroler. Atrybut ten powoduje uruchomienie kodu zaimplementowanego w pliku InitializeSimpleMembershipAttribute.cs, który znajduje się w katalogu Filters. Katalog Filters można usunąć wraz z plikiem InitializeSimpleMembershipAttribute.cs, ponieważ inicjacja połączenia z bazą danych do przechowywania danych użytkowników i ról została zaimplementowana przy starcie aplikacji w zdarzeniu Applikation_Start(). Kod kontrolera po dokonanych zmianach został przedstawiony na listingu 25. Listing 25 Kod kontrolera Administrator (plik AdministratorController.cs) using MvcApplicationSubskrybcja.Models; using System.Web.Mvc; using WebMatrix.WebData; namespace MvcApplicationSubskrybcja.Controllers [Authorize] public class AdministratorController : Controller [AllowAnonymous] public ActionResult Login(string returnurl) ViewBag.ReturnUrl = returnurl; return View(); [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(Administrator model, string returnurl) if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.password, persistcookie: model.rememberme)) return RedirectToLocal(returnUrl); ModelState.AddModelError("", "Nazwa użytkownika lub hasło są niepoprawne."); return View(model); [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() WebSecurity.Logout(); return RedirectToAction("Index", "Subscriber"); 38
40 #region Helpers private ActionResult RedirectToLocal(string returnurl) if (Url.IsLocalUrl(returnUrl)) return Redirect(returnUrl); else return RedirectToAction("Index", "Subscriber"); #endregion Dodanie widoków dla kontrolera Administrator Kontroler Account został zmodyfikowany i przemianowany na Administrator, dlatego dla zachowania konwencji należy również zmienić nazwę podkatalogu Account z folderu Views. W tym podkatalogu umieszczonych jest dziewięć widoków. Nie wszystkie z nich są potrzebne, ponieważ projekt zakłada jedynie możliwość logowania i wylogowania. Należy usunąć wszystkie widoki, pozostawiając jedynie widok Login.cshtml. W treści pliku Login.cshtml trzeba zmienić nazwę modelu, z którego widok korzysta (LoginModel), na Administrator, przetłumaczyć angielskie komunikaty oraz usunąć wpis tworzący odnośnik do rejestracji i logowania z użyciem konta zewnętrznego (np. konta w portalu społecznościowym). Po wykonaniu tych czynności będzie otrzymany kod podobny jak na listingu 26. Listing 26. Widok Login ( plik ViewBag.Title = "Logowanie"; <hgroup class="title"> <h1>@viewbag.title</h1> (Html.BeginForm(new ReturnUrl = <fieldset> <legend>log in Form</legend> <ol> => => => m.username) </li> => => m.password) 39
41 @Html.ValidationMessageFor(m => m.password) </li> => => m.rememberme, = "checkbox" ) </li> </ol> <input type="submit" value="zaloguj" /> W ten sposób zrealizowana została zaprojektowana funkcjonalność do aplikacji. Po uruchomieniu aplikacji i wpisaniu w przeglądarce adresu URL użytkownik może zobaczyć na ekranie formularz logowania rys.24 Rys. 24. Formularz logowania użytkownika. Potrzebne są dalsze uzupełnienia, w tym umożliwienie użytkownikowi wybrania opcji logowania ze strony głównej aplikacji. Na rys. 24 w prawym górnym rogu widoczne są dwa odnośniki : Register i Log In. Aktualnie po ich wybraniu użytkownik jest przekserowany na stronę błędu, ponieważ odnośniki zostali zdefiniowane wcześniej aby korzystali się z kontrolera Account, którego nazwa została zmieniona na Administrator. Aby odnośniki znowu stały aktywne, należy zmienić adresy do nich. Wtym celu: 1. Otwórz plik _LoginPartial.cshtml, który znajduje się w podkatalogu Shared folderu Views. 2. Zmodyfikuj jego zawartość zgodnie z listingiem 27. Listing 27. Modyfikacja widoku _LoginPartial (plik (Request.IsAuthenticated) 40
42 <text> Jesteś newsletter", "Send", (Html.BeginForm("LogOff", "Administrator", FormMethod.Post, new id = "logoutform" <a href="javascript:document.getelementbyid('logoutform').submit()">wyloguj</a> </text> else <ul> <li>@html.actionlink("zaloguj", "Login", "Administrator", routevalues: null, htmlattributes: new id = "loginlink" )</li> </ul> Plik _LoginPartial.cshtml to kontrolka użytkownika. Kontrolka jest umieszczona na stronie wzorcowej (w pliku _Layout.schtml w folderze Shared) za pomocą kodu <div class="float-right"> <section </section> Umieszczenie kontrolki na stronie wzorcowej powoduje, że jest ona widoczna na każdej stronie aplikacji. Dlatego użytkownik ma możliwość logowania /wylogowania się na dowolnej stronie aplikacji. Dodatkowo poprzez umieszczenie w tej kontrolce newsletter", "Send", "Newsletter") zalogowany użytkownik ma możliwość wysyłania newslettera. Poza tymi modyfikacjami należy w pliku Web.config zmienić wpis <forms loginurl="~/account/login" timeout="2880" /> na <forms loginurl="/administrator/login" timeout="2880" />. To spowoduje, że wywołanie akcji kontrolerów, które są opatrzone atrybutem Authorize, będzie w przypadku niezalogowanego użytkownika do strony logowania. Teraz po uruchomieniu aplikacji użytkownik widzi w prawym górnym rogu opcję Zaloguj rys. 25. Po zalogowaniu ma natomiast dostępne opcje Wyślij newsletter oraz Wyloguj rys
43 Rys. 25. Strona główna aplikacji przed zalogowaniem się Administratora. Rys. 26. Strona główna aplikacji po zalogowaniu się Administratora. Ostatnia, konieczna modyfikacja to uniemożliwienie zwykłym użytkownikom wykonywania akcji przeznaczonych dla Administratora, czyli wysyłania newslettera i wyświetlania subskrybentów. Opcja wysyłania newslettera została już ukryta przed niezałogowanymi użytkownikami. Jeśli jednak użytkownik wywoła tę akcję, bezpośrednio wpisując adres URL w przeglądarce ( to będzie ona wykonana. Aby zabezpieczyć akcje przed nieuprawnionym wywołaniem, należy akcje kontrolera opatrzyć atrybutem Authorize. Wtedy do akcji dostęp będą mieli jedynie zalogowani użytkownicy. Atrybut przyjmuje dwa rodzaje parametrów: można podać nazwę roli (lub ról) użytkownika lub podać wprost nazwę(nazwy) użytkownika. W projektowanej aplikacji jest wykorzystany pierwszy sposób ograniczenie dostepu z użyciem nazwy roli użytkownika. W aplikacji tylko użytkownik w roli Administratora ma mieć możliwość wysyłania newslettera, dlatego cale kontroler Newsletter należy opatrzyć atrybutem Authorize listing 28. Listing 28. Opatrzenie atrybutem Authorize kontrolera Newsletter (plik NewsletterController.cs) [Authorize(Roles = "Administrator")] public class NewsletterController : Controller 42
Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)
Microsoft.NET: ASP.NET MVC + Entity Framework (Code First) Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2012. W ramach projektu budowana jest prosta
ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3
3 ASP.NET MVC Podstawy 1 1. Cel zajęć Celem zajęć jest zapoznanie się z podstawami ASP.NET MVC 2.0 Framework. 2. Zadanie Proszę zbudować prostą aplikację WWW przy zastosowaniu framework a ASP.NET MVC 2.0
Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)
Microsoft.NET: ASP.NET MVC + Entity Framework (Code First) Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2015. W ramach projektu budowana jest prosta
Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner 2013-03-11
Poznaj ASP.NET MVC Kamil Cieślak Microsoft Student Partner 2013-03-11 Agenda Czym jest ASP.NET MVC? Wzorzec MVC ASP.NET MVC vs inne frameworki Bazy danych w ASP.NET MVC Jak zacząć? 2 Czym jest ASP.NET
Microsoft.NET: ASP.NET MVC + Entity Framework (Model First)
Microsoft.NET: ASP.NET MVC + Entity Framework (Model First) Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2012. W ramach projektu budowana jest prosta
4 AS SP.NET MVC. Widok. Zaawansowane programowanie internetowe Instrukcja nr 4
4 AS SP.NET MVC Widok 1 1. Cel zajęć Celem zajęć jest zapoznanie się z metodami tworzenia widoków w ASP.NET MVC 2. Wprowadzenie Na poprzednich zajęciach stworzyliśmy prostą aplikację pokazującą podstawowe
Walidacja danych w ASP.NET MVC
Walidacja danych w ASP.NET MVC 1. Prosta walidacja 2. Walidacja z Data Annotation public ActionResult Edit(Person person) bool blad = false; if(person.name.trim().length == 0) ViewData["Blad1"] = "Nazwisko
Modele danych walidacja widoki zorientowane na model
Modele danych walidacja widoki zorientowane na model 1. Wprowadzenie Modele danych Modele danych w ASP.NET MVC to klasy znajdujące się w katalogu Models. Ich zadaniem jest mapowanie danych przesyłanych
Laboratorium 7 Blog: dodawanie i edycja wpisów
Laboratorium 7 Blog: dodawanie i edycja wpisów Dodawanie nowych wpisów Tworzenie formularza Za obsługę formularzy odpowiada klasa Zend_Form. Dla każdego formularza w projekcie tworzymy klasę dziedziczącą
Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz
Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz Walidacja po stronie klienta: - w MVC 3 i 4 domyślnie jest włączona także walidacja po stronie klienta - wykorzystuje ona JavaScript
Platforma e-learningowa
Dotyczy projektu nr WND-RPPD.04.01.00-20-002/11 pn. Wdrażanie elektronicznych usług dla ludności województwa podlaskiego część II, administracja samorządowa realizowanego w ramach Decyzji nr UDA- RPPD.04.01.00-20-002/11-00
Instrukcja laboratoryjna
Zaawansowane techniki obiektowe 2016/17 Instrukcja laboratoryjna Testy funkcjonalne Prowadzący: Tomasz Goluch Wersja: 1.0 Testowanie aplikacji z bazą danych Większość współczesnych aplikacji korzysta z
Laboratorium 6 Tworzenie bloga w Zend Framework
Laboratorium 6 Tworzenie bloga w Zend Framework Przygotowanie bazy danych 1. Wykonaj skrypt blog.sql, który założy w bazie danych dwie tabele oraz wpisze do nich przykładowe dane. Tabela blog_uzytkownicy
1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1
1 LINQ 1 1. Cel zajęć Celem zajęć jest zapoznanie się z technologią LINQ oraz tworzeniem trójwarstwowej aplikacji internetowej. 2. Zadanie Proszę przygotować aplikację WWW, która: będzie pozwalała na generowanie
Aplikacje WWW - laboratorium
Aplikacje WWW - laboratorium JavaServer Faces Celem ćwiczenia jest przygotowanie aplikacji internetowej z wykorzystaniem technologii JSF. Prezentowane ćwiczenia zostały wykonane w środowisku Oracle JDeveloper
5 AS SP.NET MVC. Walidacja danych. Zaawansowane programowanie internetowe Instrukcja nr 5
5 AS SP.NET MVC Walidacja danych 1 1. Cel zajęć Celem zajęć jest zapoznanie się z metodami walidacji danych wprowadzanych przez użytkownika oraz z tworzeniem własnych walidatorów. 2. Zadanie Proszę przebudować
Baza danych sql. 1. Wprowadzenie
Baza danych sql 1. Wprowadzenie Do tej pory operowaliście na listach. W tej instrukcji pokazane zostanie jak stworzyć bazę danych. W zadaniu skorzystamy z edytora graficznego struktury bazy danych, który
Microsoft.NET: LINQ to SQL, ASP.NET AJAX
Microsoft.NET: LINQ to SQL, ASP.NET AJAX Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2008 oraz serwer bazy danych SQL Server Express 2005 (lub
Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3
Currenda EPO Instrukcja Konfiguracji Wersja dokumentu: 1.3 Currenda EPO Instrukcja Konfiguracji - wersja dokumentu 1.3-19.08.2014 Spis treści 1 Wstęp... 4 1.1 Cel dokumentu... 4 1.2 Powiązane dokumenty...
Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione
Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf Materiały poprawione Rozwiązanie zadania w NetBeans IDE 7.4: Jarosław Ksybek, Adam Miazio Celem ćwiczenia jest przygotowanie prostej aplikacji
WYKORZYSTANIE WZORCA MVC W ASP.NET
MACIEJ WĘGRZYNOWSKI Wydział Elektroniki i Informatyki Politechniki Koszalińskiej Kierunek Informatyka, II rok studiów niestacjonarnych drugiego stopnia Przedmiot PROGRAMOWANIE W ŚRODOWISKU.NET WYKORZYSTANIE
Nowy projekt: - ASP.NET MVC 3 Web Application - [Other Languages] Visual C# Web ASP.NET MVC 3 Web Application - okno dialogowe:
Instalacja MVC 3: - http://www.asp.net/mvc - Visual Studio 2010 zawiera wbudowane MVC 2 - wymagany jest.net 4.0, a więc co najmniej Windows XP SP3 (jeżeli ma się zainstalowane Visual Studio 2010, może
Platformy Programowania
Platformy Programowania Ćwiczenie 1 4 x Hello World! Środowisko programistyczne, w którym będziemy pracować do wakacji: Microsoft Visual Studio 2010 Profesional 1. Utwórz aplikację konsolową. Po uruchomieniu
Platforma e-learningowa
Dotyczy projektu nr WND-RPPD.04.01.00-20-002/11 pn. Wdrażanie elektronicznych usług dla ludności województwa podlaskiego część II, administracja samorządowa realizowanego w ramach Decyzji nr UDA- RPPD.04.01.00-20-002/11-00
Instalacja systemu zarządzania treścią (CMS): Joomla
Instalacja systemu zarządzania treścią (CMS): Joomla Na stronie http://www.cba.pl/ zarejestruj nowe konto klikając na przycisk:, następnie wybierz nazwę domeny (Rys. 1a) oraz wypełnij obowiązkowe pola
Instrukcja użytkownika
Instrukcja użytkownika ul. Zawalna 1/5 51-118 Wrocław e-mail: biuro@innotechtion.pl www.innotechtion.pl Spis treści 1 Instalacja oprogramowania SMS Studio...2 2 Pierwsze uruchomienie... 4 2.1 Rejestracja...
Wprowadzenie do Doctrine ORM
Wprowadzenie do Doctrine ORM Przygotowanie środowiska Do wykonania ćwiczenia konieczne będzie zainstalowanie narzędzia Composer i odpowiednie skonfigurowanie Netbeans (Tools->Options->Framework & Tools->Composer,
Kontrola dostępu w ASP.NET
Ćwiczenie 13 Temat: Kontrola dostępu w ASP.NET Cel ćwiczenia: W ramach ćwiczenia student zapozna się mechanizmami kontroli dostępu obecnymi w ASP.NET. Nauczy się konfigurować uprawnienia poszczególnych
File -> New -> File HTML Page Open <Body></Body> C:\inetpub\wwwroot Index.html
Ćwiczenie 1 Usłyszałeś, że w najbliższym czasie szykuje Ci się zlecenie, więc postanowiłeś zapoznać się z podstawami tworzenia stron internetowych. W tym celu postawisz serwer IIS na swojej maszynie domowej
Backend Administratora
Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona
PRODUKCJA BY CTI INSTRUKCJA INSTALACJI I KONFIGURACJI
PRODUKCJA BY CTI INSTRUKCJA INSTALACJI I KONFIGURACJI Spis treści Ważne informacje przed instalacją... 3 1. Instalacja oprogramowania... 4 2. Konfiguracja połączenia z serwerem SQL oraz z programem OPTIMA...
ASP.NET MVC. Autor wykładu: Marek Wojciechowski
ASP.NET MVC Autor wykładu: Marek Wojciechowski Modele programistyczne ASP.NET Web Forms Komponentowy interfejs użytkownika (kontrolki) Programowanie wizualno-zdarzeniowe Klasyczna składnia ASP.NET ASP.NET
Aplikacje internetowe laboratorium ASP.NET MVC
Celem ćwiczenia jest zapoznanie studenta z technologią. Omówione zostaną poszczególne warstwy architektury MVC oraz podstawowe zagadnienia związane z konfiguracją, walidacją danych wprowadzanych przez
Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych:
Nabór CKU Przeglądanie oferty i rejestracja kandydata Informacje ogólne Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych: Internet Explorer wersja
Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?
Kadry Optivum, Płace Optivum Jak przenieść dane na nowy komputer? Aby kontynuować pracę z programem Kadry Optivum lub Płace Optivum (lub z obydwoma programami pracującymi na wspólnej bazie danych) na nowym
Instrukcja konfiguracji funkcji skanowania
Instrukcja konfiguracji funkcji skanowania WorkCentre M123/M128 WorkCentre Pro 123/128 701P42171_PL 2004. Wszystkie prawa zastrzeżone. Rozpowszechnianie bez zezwolenia przedstawionych materiałów i informacji
Poradnik zetula.pl. Jak założyć konto na zetula.pl. i zabezpieczyć dane na swoim komputerze?
Poradnik zetula.pl Jak założyć konto na zetula.pl i zabezpieczyć dane na swoim komputerze? 1.Wejdź na stronę www.zetula.pl 2.Kliknij na odnośniku Utwórz nowe konto 3.Wypełnij formularz rejestracyjny. Pola
Konfiguracja konta pocztowego w Thunderbird
Konfiguracja konta pocztowego w Thunderbird Sygnity SA 2013 Wszystkie prawa zastrzeżone. Znaki firmowe oraz towarowe użyte w opracowaniu są prawną własnością ich właścicieli. Autor dokumentacji: Magdalena
Zastępstwa Optivum. Jak przenieść dane na nowy komputer?
Zastępstwa Optivum Jak przenieść dane na nowy komputer? Aby kontynuować pracę z programem Zastępstwa Optivum na innym komputerze, należy na starym komputerze wykonać kopię zapasową bazy danych programu
Współpraca z platformą Emp@tia. dokumentacja techniczna
Współpraca z platformą Emp@tia dokumentacja techniczna INFO-R Spółka Jawna - 2013 43-430 Pogórze, ul. Baziowa 29, tel. (33) 479 93 29, (33) 479 93 89 fax (33) 853 04 06 e-mail: admin@ops.strefa.pl Strona1
Podręcznik Użytkownika LSI WRPO
Podręcznik użytkownika Lokalnego Systemu Informatycznego do obsługi Wielkopolskiego Regionalnego Programu Operacyjnego na lata 2007 2013 w zakresie wypełniania wniosków o dofinansowanie Wersja 1 Podręcznik
KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED
KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED Podręcznik użytkownika Katowice 2010 Producent programu: KAMSOFT S.A. ul. 1 Maja 133 40-235 Katowice Telefon: (0-32) 209-07-05 Fax:
Skrócona instrukcja pracy z Generatorem Wniosków
Skrócona instrukcja pracy z Generatorem Wniosków I. OGÓLNA OBSŁUGA GENERATORA WNIOSKÓW Rozpoczynanie pracy z generatorem przez nowych użytkowników Aby skorzystać z Generatora Wniosków należy posiadać konto
Architektura MVC w ASP.NET. Autor wykładu: Marek Wojciechowski
Architektura MVC w ASP.NET Autor wykładu: Marek Wojciechowski Modele programistyczne ASP.NET Web Forms Komponentowy interfejs użytkownika (kontrolki) Programowanie wizualno-zdarzeniowe Klasyczna składnia
Walidacja po stronie serwera Walidacja po stronie klienta:
Walidacja po stronie serwera: - do prostej walidacji słuŝy obiekt ModelState, - walidacja, która wykorzystuje ten obiekt wykonuje odpowiednie testy i w przypadku błędu woła metodę AddModelError z parametrami
Sesje i logowanie. 1. Wprowadzenie
Sesje i logowanie 1. Wprowadzenie Żądania od nawet tego samego użytkownika na serwerze nie są domyślnie w żaden sposób łączone ze sobą. Każde jest w pewnym sensie nowe i serwer nie jest w stanie stwierdzić,
Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?
Kadry Optivum, Płace Optivum Jak przenieść dane na nowy komputer? Aby kontynuować pracę z programem Kadry Optivum lub Płace Optivum (lub z obydwoma programami pracującymi na wspólnej bazie danych) na nowym
Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2017 INFORMACJE OGÓLNE 1. Wnioski o dofinansowanie projektu w ramach konkursu nr 1/1.1.1/2017
Instrukcja obsługi certyfikatów w programie pocztowym MS Outlook Express 5.x/6.x
Spis treści Wstęp... 1 Instalacja certyfikatów w programie pocztowym... 1 Instalacja certyfikatów własnych... 1 Instalacja certyfikatów innych osób... 3 Import certyfikatów innych osób przez odebranie
R o g e r A c c e s s C o n t r o l S y s t e m 5
R o g e r A c c e s s C o n t r o l S y s t e m 5 Nota aplikacyjna nr 012 Wersja dokumentu: Rev. A Pierwsze uruchomienie RCP Master 3 Wprowadzenie Niniejszy dokument opisuje proces instalacji aplikacji
FAQ Systemu EKOS. 1. Jakie są wymagania techniczne dla stanowiska wprowadzania ocen?
27.06.11 FAQ Systemu EKOS 1. Jakie są wymagania techniczne dla stanowiska wprowadzania ocen? Procedura rejestracji ocen wymaga podpisywania protokołów (w postaci wypełnionych formularzy InfoPath Forms
ibcslabel v2 Instrukcja instalacji systemu
ibcslabel v2 Instrukcja instalacji systemu Niniejsze opracowanie podlega ochronie przewidzianej w ustawie z dnia 4 lutego 1994 r. o prawie autorskim i prawach pokrewnych (Dz. U. z 2000 r., Nr 80, poz.
Zaawansowane aplikacje internetowe laboratorium REST
Zaawansowane aplikacje internetowe laboratorium REST Pytka Bartosz, Drożdż Mateusz, Ejkszto Mateusz, Łozowski Marcin, Tański Mariusz Do wykonania ćwiczeń potrzebne jest zintegrowane środowisko programistyczne
Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych:
Nabór CKU Przeglądanie oferty i rejestracja kandydata Informacje ogólne Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych: Internet Explorer wersja
Instrukcja instalacji programu ARPunktor wraz z serwerem SQL 2005 Express
Instrukcja instalacji programu ARPunktor wraz z serwerem SQL 2005 Express 1. Przygotowanie do instalacji W celu zainstalowania aplikacji należy ze strony internetowej pobrać następujący plik: http://in.take.pl/arpunktor/instalacja.zip.
Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych:
Rejestracja- MDK Przeglądanie oferty i rejestracja kandydata Informacje ogólne Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych: Internet Explorer
Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x
Wdrożenie modułu płatności eservice dla systemu oscommerce 2.3.x - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie
System epon Dokumentacja użytkownika
System epon Dokumentacja użytkownika Prawa autorskie tego opracowania należą do MakoLab S.A. Dokument ten, jako całość, ani żadna jego część, nie może być reprodukowana lub rozpowszechniana w jakiejkolwiek
Wdrożenie modułu płatności eservice. dla systemu Zen Cart 1.3.9 1.5
Wdrożenie modułu płatności eservice dla systemu Zen Cart 1.3.9 1.5 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie
Zaawansowane aplikacje internetowe - laboratorium
Zaawansowane aplikacje internetowe - laboratorium Web Services (część 3). Do wykonania ćwiczeń potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2005. Ponadto wymagany jest
Płace Optivum. 1. Zainstalować serwer SQL (Microsoft SQL Server 2008 R2) oraz program Płace Optivum.
Płace Optivum Jak przenieść dane programu Płace Optivum na nowy komputer? Aby kontynuować pracę z programem Płace Optivum na nowym komputerze, należy na starym komputerze wykonać kopię zapasową bazy danych
Instrukcja. Rejestracji i aktywacji konta w systemie so-open.pl DOTACJE NA INNOWACJE; SOFTWARE OPERATIONS SP. Z O. O.
Instrukcja Rejestracji i aktywacji konta w systemie so-open.pl 1Strona 1 z 12 Spis treści Wstęp... 3 Rejestracja... 3 Aktywacja konta... 5 Rozpoczęcie pracy z systemem... 7 Pierwsze logowanie do systemu...
Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015
Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015 INFORMACJE OGÓLNE 1. Wnioski o dofinansowanie projektu w ramach konkursu nr 1/1.1.1/2015
- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy
Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy - Narzędzie Windows Forms - Przykładowe aplikacje 1 Narzędzia Windows Form Windows Form jest narzędziem do tworzenia aplikacji dla
Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller
Dokumentacja systemu NTP rekrut Autor: Sławomir Miller 1 Spis treści: 1. Wstęp 1.1 Wprowadzenie 1.2 Zakres dokumentu 2. Instalacja 2.1 Wymagania systemowe 2.2 Początek 2.3 Prawa dostępu 2.4 Etapy instalacji
Instrukcja zarządzania kontem jednostki samorządu terytorialnego w serwisie internetowym
Instrukcja zarządzania kontem jednostki samorządu terytorialnego w serwisie internetowym www.esiop.legionowo.pl Rejestracja w serwisie: Aby utworzyć konto w serwisie, należy otworzyć w przeglądarce internetowej
Nowy szablon stron pracowników ZUT
Nowy szablon stron pracowników ZUT Uczelniane Centrum Informatyki ZUT przygotowało nowy szablon stron pracowników, zunifikowany z obecnymi stronami ZUT. Serdecznie zachęcamy Państwa do migracji na nowy
Wykład 12. Programowanie serwera MS SQL 2005 w C#
Wykład 12 Programowanie serwera MS SQL 2005 w C# Budowa procedur składowanych w C# Budowa funkcji składowanych w C# Wykorzystanie funkcji składowanych w C# po stronie klienta Tworzenie typów definiowanych
Nabór Bursy/CKU. Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych:
Nabór Bursy/CKU Przeglądanie oferty i rejestracja kandydata Informacje ogólne Do korzystania ze strony elektronicznej rekrutacji zalecamy następujące wersje przeglądarek internetowych: Internet Explorer
Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015
Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015 INFORMACJE OGÓLNE 1. Wnioski o dofinansowanie projektu w ramach konkursu nr 1/1.1.1/2015
Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie z Seminarium Dyplomowego Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
PORADNIK KORZYSTANIA Z SERWERA FTP ftp.architekturaibiznes.com.pl
PORADNIK KORZYSTANIA Z SERWERA FTP ftp.architekturaibiznes.com.pl Do połączenia z serwerem A&B w celu załadowania lub pobrania materiałów można wykorzystać dowolny program typu "klient FTP". Jeżeli nie
Miejskie Wodociągi i Oczyszczalnia sp. z o.o. w Grudziądzu. ibok. Internetowe Biuro Obsługi Klienta. Instrukcja obsługi
Miejskie Wodociągi i Oczyszczalnia sp. z o.o. w Grudziądzu ibok Internetowe Biuro Obsługi Klienta Instrukcja obsługi SPIS TREŚCI 1. AUTORYZACJA UŻYTKOWNIKA W SYSTEMIE IBOK... 3 1.1 Logowanie... 3 1.2 Przywracanie
W niniejszej instrukcji obsługi zostały opisane najważniejsze informacje dotyczące następujących kwestii:
Skrócona instrukcja obsługi aplikacji LQS (oryginalna instrukcja obsługi) Wersja instrukcji: 1.2 Wersja aplikacji LQS 1.1.20.0 Informacje dotyczące niniejszej instrukcji W niniejszej instrukcji obsługi
https://lsi.ncbr.gov.pl
Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 2/1.1.2/2015 INFORMACJE OGÓLNE 1. Wnioski o dofinansowanie projektu w ramach konkursu nr 2/1.1.2/2015
Instrukcja instalacji nos niko w USB w bankowos ci Alior Banku
Instrukcja instalacji nos niko w USB w bankowos ci Alior Banku Nośnik USB służy do przechowywania klucza elektronicznego, używanego do logowania i autoryzacji transakcji. Opcja dostępna jest wyłącznie
Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości
Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości część 2 Zaprojektowaliśmy stronę dodaj_dzial.aspx proszę jednak spróbować dodać nowy dział nie podając jego nazwy
Finanse VULCAN. Jednostki dodaje i konfiguruje administrator główny platformy (w aplikacji Zarządzanie platformą).
Finanse VULCAN Migracja danych z systemu Finanse Optivum do aplikacji Finanse VULCAN Aplikacja Finanse VULCAN to nowa aplikacja firmy VULCAN do obsługi finansowo-księgowej jednostek oświatowych. Jest to
Realizacja Aplikacji Internetowych 2012 laboratorium K. M. Ocetkiewicz
Realizacja Aplikacji Internetowych 2012 laboratorium K. M. Ocetkiewicz Instalacja MVC 4: - http://www.asp.net/mvc - Visual Studio 2012 (także Web Express) zawiera wbudowane MVC 4 - można doinstalować MVC
Instrukcja pozyskania identyfikatora - UID
Instrukcja pozyskania identyfikatora - UID UWAGA Instrukcja jest przeznaczona dla użytkowników, którzy posiadali aktywne konta w Krajowym Rejestrze Uprawnień, a następnie ich dane zostały zmigrowane do
Serwis jest dostępny w internecie pod adresem www.solidnyserwis.pl. Rysunek 1: Strona startowa solidnego serwisu
Spis treści 1. Zgłoszenia serwisowe wstęp... 2 2. Obsługa konta w solidnym serwisie... 2 Rejestracja w serwisie...3 Logowanie się do serwisu...4 Zmiana danych...5 3. Zakładanie i podgląd zgłoszenia...
SZYBKI START. Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2. Szyfrowanie/odszyfrowanie danych 4
SZYBKI START Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2 Szyfrowanie/odszyfrowanie danych 4 Szyfrowanie/odszyfrowanie tekstu 6 Tworzenie nowego połączenia w celu
Produkcja by CTI. Proces instalacji, ważne informacje oraz konfiguracja
Produkcja by CTI Proces instalacji, ważne informacje oraz konfiguracja Spis treści 1. Ważne informacje przed instalacją...3 2. Instalacja programu...4 3. Nawiązanie połączenia z serwerem SQL oraz z programem
Pomoc dla usługi GMSTHostService. GMSTHostService. Pomoc do programu 1/14
GMSTHostService Pomoc do programu 1/14 Spis treści 1.Rejestracja...3 1.1.Pierwsza rejestracja...3 1.2.Ponowna rejestracja produktu...8 2.Podstawowe informacje o GMSTHostService...8 3.Przykładowa konfiguracja
Instrukcja instalacji programu SYSTEmSM
Instrukcja instalacji programu SYSTEmSM SYSTEmEG Sp. z o.o. Siedziba: ul. Wojrow icka 10a/14 PL 54-434 Wrocław + 48 (71) 354 47 76 Biuro: ul. Chociebuska 11 PL 54-433 Wrocław fax. + 48 (71) 358 04 99 Bank:
APLIKACJA SHAREPOINT
APLIKACJA SHAREPOINT Spis treści 1. Co to jest SharePoint?... 2 2. Tworzenie nowej witryny SharePoint (obszar roboczy)... 2 3. Gdzie znaleźć utworzone witryny SharePoint?... 3 4. Personalizacja obszaru
Włączanie/wyłączanie paska menu
Włączanie/wyłączanie paska menu Po zainstalowaniu przeglądarki Internet Eksplorer oraz Firefox domyślnie górny pasek menu jest wyłączony. Czasem warto go włączyć aby mieć szybszy dostęp do narzędzi. Po
Instrukcja zarządzania kontem przedsiębiorstwa w serwisie internetowym www.esiop.legionowo.pl
Instrukcja zarządzania kontem przedsiębiorstwa w serwisie internetowym www.esiop.legionowo.pl Rejestracja w serwisie: Aby utworzyć konto w serwisie, należy otworzyć w przeglądarce internetowej stronę www.esiop.legionowo.pl,
Leszek Stasiak Zastosowanie technologii LINQ w
Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji
Elektroniczny Urząd Podawczy
Elektroniczny Urząd Podawczy Dzięki Elektronicznemu Urzędowi Podawczemu Beneficjent może wypełnić i wysłać formularz wniosku o dofinansowanie projektów w ramach Regionalnego Programu Operacyjnego Województwa
Problemy techniczne SQL Server
Problemy techniczne SQL Server Jak utworzyć i odtworzyć kopię zapasową bazy danych za pomocą narzędzi serwera SQL? Tworzenie i odtwarzanie kopii zapasowych baz danych programów Kadry Optivum, Płace Optivum,
Podstawy technologii WWW
Podstawy technologii WWW Ćwiczenie 8 PHP, czyli poczatki nowej, dynamicznej znajomosci Na dzisiejszych zajęciach rozpoczniemy programowanie po stronie serwera w języku PHP. Po otrzymaniu żądania serwer
Pomoc systemu poczty elektronicznej Wydziału Humanistycznego Uniwersytetu Szczecińskiego. Wersja: 1.12
Pomoc systemu poczty elektronicznej Wydziału Humanistycznego Uniwersytetu Szczecińskiego Wersja: 1.12 Instrukcja samodzielnej rejestracji konta poczty elektronicznej w domenie whus.pl Przejdź Instrukcja
Opisane poniżej czynności może wykonać administrator komputera lub administrator serwera SQL (tj. użytkownik sa).
MOL Optivum Pierwsze uruchomienie programu MOL Optivum na komputerze pełniącym rolę serwera bazy danych Porada przeznaczona jest dla użytkowników, którzy zainstalowali program MOL Optivum i chcą go uruchomić
ELEKTRONICZNA KSIĄŻKA ZDARZEŃ
ELEKTRONICZNA KSIĄŻKA ZDARZEŃ Instrukcja obsługi 1. WSTĘP... 2 2. LOGOWANIE DO SYSTEMU... 2 3. STRONA GŁÓWNA... 3 4. EWIDENCJA RUCHU... 4 4.1. Dodanie osoby wchodzącej na teren obiektu... 4 4.2. Dodanie