• Nie Znaleziono Wyników

Aplikacje sieciowe

N/A
N/A
Protected

Academic year: 2021

Share "Aplikacje sieciowe"

Copied!
32
0
0

Pełen tekst

(1)

Aplikacje sieciowe

MVC

(2)

Literatura

• msdn.microsoft.com

• www.asp.net/mvc

– Screencast Pluralsight

(3)

Model Viewer Controler

Controler

Viewer Model

(4)
(5)
(6)

Struktura Projektu MVC

(7)

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; } ...}

//

(8)

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;

}

}

(9)

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 );

}

….

(10)

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");

}

(11)

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);

}

(12)

Controler - Kasowanie

(13)

Widok (View)

• Index.cshml

• Create.cshtml

• Details.cshtml

• Edit.cshtml

• …

(14)

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>

(15)

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>

(16)

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()

(17)

• @Html.ActionLink(

"Treść linka",

"Nazwa Akcji",

new { /* id=Model.PrimaryKey */ } )

• @Html.ActionLink("Dodaj Studenta", "Create",

"Student")

Parametry routingu

Controller

(18)

@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>

}

(19)

BeginForm - cd

• BeginForm("Akcja", "Kontroler", …)

– Określenie routingu,

– Metody: Get, Post

(20)

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") ]

}

(21)

Dostęp do danych

• DataBase First

• Model First

• Code First

(22)

Inne Metody Tworzenie aplikacji MVC

• Model First

a) Definicja modelu – w entity frameweork b) Tworzenie logiki biznesowej - generacja bazy danych

• DataBase First

a) Tworzenie bazy danych b) Generacja modelu EF

c) Tworzenie logiki biznesowej

(23)

Code First

• Własne obiekty

• Obiekty z Entity Framewerk

(24)

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 });

} }

(25)

Code First

Definicja bazy

public 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>

(26)

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();

} }

(27)

Global.asax

protected void Application_Start() {

AreaRegistration.RegisterAllAreas();

Database.SetInitializer(new PraktykiDBInitializer());

RegisterGlobalFilters(GlobalFilters.Filters);

RegisterRoutes(RouteTable.Routes);

}

(28)

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

);

}

(29)

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)]

(30)

Inne Mechanizmy walidacji

(31)
(32)

Cytaty