Sei sulla pagina 1di 11

MVC

Model
Contenuti
• Applicazione di esempio
• Il Model dell’Applicazione
• Estendere il Model dell’Application User
Il Modello

L’applicazione di esempio
Applicazione di esempio
• Pensata per gli agenti e gli acquirenti di una
società di intermediazione immobiliare.
• Gli Agenti (utenti registrati) inseriscono,
modificano ed eliminano le schede delle unità
immmobiliari che visitano, imputandone:
– Il nome, la descrizione, l’indirizzo, il prezzo e una
foto descrittiva
• Gli acquirenti possono solo visualizzare
suddetti dati
Model
• Una o più classi.NET che espongono proprietà
• Sono istanziate e popolate dal controller e poi
lette dalla view
• In genere mediante Entity Framework con
– Una o più classi che rappresentano il modello dati
– Una classe che rappresenta il collegamento con il db
Model dell’Applicazione
public partial class Scheda { public ApplicationUser Utente { get {
[Key] var i = new ApplicationDbContext();
public int ID { get; set; } var u = i.Users.Find(this.UserID);
[Required] return u;
public string Nome { get; set; } } }
public string Descrizione { get; set; }
public string Indirizzo { get; set; }
public string Citta { get; set; }
[Range(minimum:0,maximum:10000000000)] Collezione degli
utenti
public decimal? Prezzo { get; set; }
dell’applicaizone,
public byte[]ContenutoFoto { get; set; }
gestita da Identity
public string UserID { get; set; }
// toglie i secondi dalla visualizzazione della data
[DataType(DataType.DateTime)]
public DateTime dataregistazione { get; set; }
Model:Validazione
• Effettuata tramite attributi (Data Annotation) sul model
[Required]
public string Nome { get; set; }
[Range(minimum:0,maximum:10000000000)]
public decimal? Prezzo { get; set; }

• Gli attributi vengono parsati e viene generato codice


Javascript o attributi HTML 5 sulle viste che consentono
l’inserimento o l’edit delle schede
• La validazione dei dati avviene su tramite plugin jQuery
• Nel Controller è possibile eseguire una ulteriore validazione,
controllando la proprietà ModelState.IsValid. Suddetta
proprietà viene valorizzata del ModelBinder,
Model: Persistenza
• Il contesto dati
public partial class DBSchede : DbContext {
public DBSchede()
{ Database.SetInitializer(new
DropCreateDatabaseIfModelChanges<DBSchede>());
}
public virtual DbSet<Scheda> Schede { get; set; }
}
}

• La stringa di connessione
<add connectionString="database=SchedeImm;server=(LocalDb)\MSSQLLocalDB;
integrated security=SSPI" name="SchedeContext"
providerName="System.Data.SqlClient"/>
Model: Utente (Identity)
Classi generate dal Template di Visual Studio e memorizzate nel file
IdentityModel.cs
public class ApplicationUser : IdentityUser {}

public class ApplicationDbContext: IdentityDbContext<ApplicationUser>


{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false) {
Database.SetInitializer(new
DropCreateDatabaseIfModelChanges<ApplicationDbContext>());
}
}

Si può estendere Dichiara i DBSet Aggiungere l’inizializzatore


aggiungendo altrre Users del Db dal momento che
proprietà Roles estenderemo il model
Personalizzare Application User
Aggiungere le proprietà personalizzate al tipo Application User
public class ApplicationUser : IdentityUser {

…..
public string Nome { set; get; }
public string Cognome { set; get; }
public string Telefono { set; get; }

Ed anche alla classe direttamente mappata alla vista in fase di


registrazione: il file AccountViewModel.cs Contiene la
definizione dei tipi mappati alle viste utilizzate per il login e la
restrazione degli utenti
Estendere RegisterViewModel
public class RegisterViewModel {
[Required]
[EmailAddress]
[Display(Name = "Posta elettronica")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "La lunghezza di {0} deve
essere di almeno {2} caratteri.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Conferma password")]
[Compare("Password", ErrorMessage = "La password e la password
di conferma non corrispondono.")]
public string ConfirmPassword { get; set; }
public string Nome { set; get; }
public string Cognome { set; get; }
public string Telefono { set; get; }

Potrebbero piacerti anche