Aplikacje sieciowe
description
Transcript of Aplikacje sieciowe
Aplikacje sieciowe
MVC
Literatura
• msdn.microsoft.com• www.asp.net/mvc
– Screencast Pluralsight
Model Viewer Controler
Controler
Viewer Model
Struktura Projektu MVC
Model public class Osoba { [Key] public virtual int Id { get; set; } [Required] [Display(Name = "Imię")] public virtual string Imie { get; set; } [Required] public virtual string Nazwisko { get; set; }
[Display(Name = "Numer telefonu")] public virtual string NrTelefonu { get; set; } [Display(Name = "Adres e-mail")] public virtual string Email { get; set; }
[Display(Name = "Numer dowodu")] public virtual string NrDowodu { get; set; }...}//
public class Student: Osoba { [Required] [Display(Name="Numer Indeksu")]
public virtual string NrIndeksu { get; set; } public virtual bool MaPraktyke { get; set; } public virtual DateTime Rocznik { get; set; }
public Student() { Rocznik = DateTime.Now; } }
Kontroler (Controler) public class StudentController : Controller { // // GET: /Student/ PraktykiDB baza = new PraktykiDB();
public ActionResult Index() { // BazaDanychPraktyk baza = new BazaDanychPraktyk();
var model = baza.Studenci; return View(model ); }….
Controler - Tworzenie public ActionResult NowyStudent() { var model = new Student(); return View(model); } public ActionResult Create() { return NowyStudent(); } [HttpPost] public ActionResult Create(Student newStudent) { baza.Studenci.Add(newStudent); baza.SaveChanges(); return RedirectToAction("Index"); }
Controler Edycja public ActionResult Edit(int id) { Student student = baza.Studenci.Single(s => s.Id == id); return View(student); } [HttpPost] public ActionResult Edit(int id, FormCollection collection) { Student student = baza.Studenci.Single(s => s.Id == id); if(TryUpdateModel(student)) { baza.SaveChanges(); return RedirectToAction("Index");
}
return View(student); }
Controler - Kasowanie
Widok (View)
• Index.cshml• Create.cshtml• Details.cshtml• Edit.cshtml• …
Index.cshtml@model IEnumerable<PraktykiStudenckie.Models.Student>@{ ViewBag.Title = "Index";}<h2>Index</h2><p> @Html.ActionLink("Create New", "Create") </p><table> <tr> <th> NrIndeksu </th> <th> Imie </th> <th> Nazwisko </th>… </tr>@foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.NrIndeksu) </td> <td> @Html.DisplayFor(modelItem => item.Imie) </td> <td> @Html.DisplayFor(modelItem => item.Nazwisko) </td> …. <td> @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | @Html.ActionLink("Details", "Details", new { id=item.Id }) | @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ }) </td> </tr>}</table>
Create.cshtml@model PraktykiStudenckie.Models.Student@{ ViewBag.Title = "Create";}<h2>Create</h2><script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>@using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Student</legend> <div class="editor-label"> @Html.LabelFor(model => model.NrIndeksu) </div> <div class="editor-field"> @Html.EditorFor(model => model.NrIndeksu) @Html.ValidationMessageFor(model => model.NrIndeksu) </div> <div class="editor-label"> @Html.LabelFor(model => model.Imie) </div> <div class="editor-field"> @Html.EditorFor(model => model.Imie) @Html.ValidationMessageFor(model => model.Imie) </div> <div class="editor-label"> @Html.LabelFor(model => model.Nazwisko) </div> <div class="editor-field"> @Html.EditorFor(model => model.Nazwisko) @Html.ValidationMessageFor(model => model.Nazwisko) </div> <p> <input type="submit" value="Create" /> </p> </fieldset>}
<div> @Html.ActionLink("Back to List", "Index") </div>
Html helpers• @Html.ActionLink• @Html.DisplayFor• @Html.LabelFor(model => model.NrIndeksu)• @Html.EditorFor(model => model.NrIndeksu)• @Html.ValidationMessageFor(model => model.NrIndeksu)• @Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")• @Html.ActionLink• @Html.ValidationSummary(true)• Html.ValidationSummary(true)• Html.BeginForm()
• @Html.ActionLink("Treść linka", "Nazwa Akcji", new { /* id=Model.PrimaryKey */ }
)
• @Html.ActionLink("Dodaj Studenta", "Create", "Student")
Parametry routingu
Controller
@Html.BeginForm@using (Html.BeginForm()) { <div> <fieldset> <legend>Account Information</legend>
<div class="editor-label"> @Html.LabelFor(m => m.UserName) </div> <div class="editor-field"> @Html.TextBoxFor(m => m.UserName) @Html.ValidationMessageFor(m => m.UserName) </div>
………. <p> <input type="submit" value="Log On" /> </p> </fieldset> </div>}
BeginForm - cd
• BeginForm("Akcja", "Kontroler", …)– Określenie routingu,– Metody: Get, Post
PartialView• Znacznik:
<div id="logindisplay"> @Html.Partial("_LogOnPartial") </div>• Plik _LogOnPartia.cshtml@if(Request.IsAuthenticated) { <text>Welcome <strong>@User.Identity.Name</strong>! [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>}else { @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]}
Dostęp do danych
• DataBase First• Model First• Code First
Inne Metody Tworzenie aplikacji MVC
• Model Firsta) Definicja modelu – w entity frameweorkb) Tworzenie logiki biznesowej - generacja bazy danych
• DataBase Firsta) Tworzenie bazy danychb) Generacja modelu EFc) Tworzenie logiki biznesowej
Code First
• Własne obiekty• Obiekty z Entity Framewerk
Własne obiety public class BazaDanychPraktyk{ private List<Student> studenci; public List<Student> Studenci{ get { return studenci; } set { studenci = value; } } private List<Umowa> umowy; public List<Umowa> Umowy {get { return umowy; } set { umowy = value; } } private List<Firma> firmy; public List<Firma> Firmy { get { return firmy; } set { firmy = value; } } public BazaDanychPraktyk(){ studenci= new List<Student>(); firmy = new List<Firma>();
umowy= new List<Umowa>(); studenci.Add( new Student(){Imie="Andrzej", Nazwisko="Nowak", Indeksu="3456"}); studenci.Add( new Student(){Imie="Jan", Nazwisko="Kowalski",NrIndeksu="1234"}); firmy.Add(new Firma() { Nazwa = "Firma 1" }); firmy.Add(new Firma() { Nazwa = "Firma 2" }); firmy.Add(new Firma() { Nazwa = "Firma 3" });
umowy.Add(new Umowa() {Student= studenci[0], Firma=firmy[1],Id=1 }); } }
Code FirstDefinicja bazypublic class PraktykiDB: DbContext { public DbSet<Student> Studenci { get; set; } public DbSet<Firma> Firmy { get; set; } public DbSet<Umowa> Umowy { get; set; } }Web.config<configuration> <connectionStrings><add name="PraktykiDB" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|PraktykiDB.mdf;User Instance=true;Initial Catalog=PraktykiDB;MultipleActiveResultSets=true" providerName="System.Data.SqlClient" /> </connectionStrings>
CodeFirst - Inicjalizacja Bazy class PraktykiDBInitializer : DropCreateDatabaseIfModelChanges<PraktykiStudenckie.Models.PraktykiDB>{ // DropCreateDatabaseAlways<PraktykiStudenckie.Models.PraktykiDB> protected override void Seed(Models.PraktykiDB context) { base.Seed(context); context.Studenci.Add(new Student(){Imie = "Andrzej",Nazwisko ="Nowak", ...} ); context.Studenci.Add(new Student() {Imie = "Jan",Nazwisko ="Kowalski", ...} );
context.Firmy.Add(new Firma() { Nazwa = "Firma 1" }); context.Firmy.Add(new Firma() { Nazwa = "Firma 2" }); context.Firmy.Add(new Firma() { Nazwa = "Firma 3" });
context.SaveChanges();
context.Umowy.Add(new Umowa() { Student = context.Studenci.First(), Firma = context.Firmy.First() });
context.SaveChanges(); } }
Global.asaxprotected void Application_Start() { AreaRegistration.RegisterAllAreas(); Database.SetInitializer(new PraktykiDBInitializer());
RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); }
Global.asax - cd public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); }
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }
// Parameter defaults );
}
Atrybuty Formatujące i Walidujące
• [Key]• [Display(Name = "Data Utworzenia")]• [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString =
"{0:d}")]
• [Required]• [DataType(DataType.Date)]• [DataType(DataType.EmailAddress)]• [DataType(DataType.MultilineText)]• [DataType(DataType.Password)]• [DataType(DataType.PhoneNumber)]
Inne Mechanizmy walidacji