Bonjour,

Dans le cadre d'un site web en ASP MVC 3 et utilisant un mappage avec une base de données via Entity Framework, j'ai voulu faire un héritage de modèles pour factoriser du code, plus concrètement :

Un modèle Client avec les champs prénom et nom.
Un modèle Entreprise héritant de Client et ajoutant le champs SIRET.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
// Modèles :
 
class Client {
public string Prenom { get; set; }
public string Nom { get; set; }
}
 
class Entreprise : Client {
public string Siret{ get; set; }
}
 
...
 
// Controlleurs :
 
class ClientController {
 
public ActionResult EditClient(int id) {
 
Client model;
 
if (..)
model = new Client();
else
model = new Entreprise();
 
return View(model);
}
 
public void EditClient(Client c) {
if (c is Entreprise)
...
else
...
}
 
}
 
// Vue :
 
@model Client
 
@Html.EditorFor(m => m.Prenom);
@Html.EditorFor(m => m.Nom);
 
@if (Model is Entreprise) {
@Html.Partial("EntreprisePartial")
}
 
// Vue Partielle :
@model Entreprise
 
@Html.EditorFor(m => m.Siret)
Est-il possible d'avoir une unique vue fortement typée et pouvoir juste faire un test dans la vue pour afficher le champ "SIRET" ?

Parce que pour le moment du côté controller dans la méthode EditClient(Client c), "c" est toujours du type Client.

Une idée de best-practice plutôt que de devoir faire une vue par type de client ?

Merci !