Salut
Quand j'essaie d'ajouter une déclaration d'un deuxième modèle dans ma page .aspx j’obtiens l'erreur suivante:
pouvez-vous m'aider!Citation:
Only one 'model' statement is allowed in a file
merci,
pacifiquement.
Version imprimable
Salut
Quand j'essaie d'ajouter une déclaration d'un deuxième modèle dans ma page .aspx j’obtiens l'erreur suivante:
pouvez-vous m'aider!Citation:
Only one 'model' statement is allowed in a file
merci,
pacifiquement.
Bah le message est assez clair, non ? On ne peut pas déclarer plusieurs modèles dans la même page, c'est tout...
La directive @model crée une vue fortement typée, pour un type de modèle donné : ça indique le type de la propriété Model. Or cette propriété ne peut pas avoir 2 types différents...
bonjour,
Je suppose que tu parle de vu fortement typé. Si c'est le cas je pense que c'est normal parce que d'après moi on ne peut pas faire "hériter" une vue fortement typée de plusieurs modèle. Tu devrais créer un ModelView qui correspond aux différents champs dont tu as besoin dans ta vue et faire "hériter" ta vue de ce ModelView.
PS: désolé je répète un peu ce que vient de dire Tomlev, je n'avais pas vu qu'il avait déjà répondu au post :aie:
cordialement,
Salut,
mais si jamais j'ai plusieurs objets à utiliser et encore un IEnumerable comment peut-on y arriver !!
merci.
Salut
je ne suis pas arrivée à le faire :(
y a pas un exemple sur internet ?!
merci.
Pas arrivé à faire quoi ? A créer une classe ?! Si c'est ça il faudrait sérieusement penser à te replonger dans un cours de C# :?
En gros, si tu as des objets X et Y (de types Titi et Toto) que tu veux utiliser comme modèles, tu crées une classe comme ça :
Pour le passer à la vue, tu fais ça :Code:
1
2
3
4
5 class MonModele { public Titi X { get; set; } public Toto Y { get; set; } }
Et dans la vue, tu mets MonModele comme modèle...Code:return View(new MonModele { X = x, Y = y });
Plus de détail avec du code pourrait aider à savoir pourquoi ça ne marche pas. Parce que la je suis en formation pour passer mon brevet de sorcellerie mais j'ai pas encore appris à lire dans une boule de cristal :mouarf:
cordialement
y a pas un exemple sur internet comme ça je peux le suivre et savoir où je me trompe !
Va voir de ce coté la: http://weblogs.asp.net/scottgu/archi...alidation.aspx
Le post inclut la notion de validation mais c'est juste un plus :ccool:
cordialement
merci ! mais en fait ce que je veux c'est utiliser plusieurs modèles dans la même vue même
en fait j'ai créé une classe :
puis dans ma vue j'ai ajouté la ligne suivante:Code:
1
2
3
4
5
6
7
8 namespace MVC3ApplicationPersonneAdresses.Models { public class RechercheEtudiant { public Activite Activites { get; set; } public IEnumerable<Etudiant> Etudiants { get; set; } } }
et dans mon controlleur:Code:@model MVC3ApplicationPersonneAdresses.Models.RechercheEtudiant
cette action ne contient pas le deuxième objet puisque même au niveaux Vue ça ne marche pas.Code:
1
2
3
4
5
6
7
8
9 public ViewResult Index(string recherche) { var etudiants = db.Etudiants.Include(e => e.Niveau); if (!String.IsNullOrEmpty(recherche)) { etudiants = etudiants.Where(e => e.Nom.ToUpper().Contains(recherche.ToUpper())); } return View(etudiants.ToList()); }
Merci
ma page index contient le code suivant:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @using (Html.BeginForm()) { <div> Recherche par Nom ou Prénom: @Html.TextBox("recherche") <div class="editor-label"> @Html.LabelFor(model => model.NiveauID, "Niveau") </div> <div class="editor-field"> @Html.DropDownList("NiveauID", String.Empty) @Html.ValidationMessageFor(model => model.NiveauID) </div> <input type="submit" value="Rechercher" /> </div> }
mes classes sont: Activite, Etudiant, Niveau:Code:
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 <table class="tablesorter"> <thead> <tr> <th class="thcursseur"> Nom </th> <th class="thcursseur"> Prenom </th> <th class="thcursseur"> Niveau </th> <th class="thcursseur"> Liste activités </th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td class="clwidthtd"> @Html.ActionLink("Editer", "Edit", new { id = item.EtudiantID }) | @Html.ActionLink("Spprimer", "Delete", new { id = item.EtudiantID }) | @Html.DisplayFor(modelItem => item.Nom) </td> <td> @Html.DisplayFor(modelItem => item.Prenom) </td> <td> @Html.DisplayFor(modelItem => item.Niveau.Libelle) </td> <td> @{ foreach (var activite in item.Activites) { @activite.Libelle <br /> } } </td> </tr> } </tbody> </table>
Code:
1
2
3
4
5
6
7
8
9 public class Activite { public int ActiviteID { get; set; } [Required(ErrorMessage = "Veuillez saisir l'ctivité de l'étudiant")] [Display(Name = "Activité de l'étudiant")] [MaxLength(50)] public string Libelle { get; set; } public virtual ICollection<Etudiant> Etudiants { get; set; } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12 public class Etudiant { public int EtudiantID { get; set; } [Required(ErrorMessage = "Veuillez saisir le nom de l'étudiant")] public string Nom { get; set; } [Required(ErrorMessage = "Veuillez saisir le prénom de l'étudiant")] public string Prenom { get; set; } [Required(ErrorMessage = "Veuillez selectionnez le niveau d'étude")] public int NiveauID { get; set; } public virtual Niveau Niveau { get; set; } public virtual ICollection<Activite> Activites { get; set; } }
Code:
1
2
3
4
5
6 public class Niveau { public int NiveauID { get; set; } public string Libelle { get; set; } public virtual ICollection<Etudiant> Etudiants { get; set; } }
Je ne comprends pas très bien le sens de ta phrase... Ta vue attend un objet de type RechercheEtudiant, mais tu lui passes une liste d'étudiants, donc forcément ça ne peut pas marcher...
Tu veux afficher quoi au juste sur ta vue ? Une liste d'étudiants, avec des filtres par niveau et par nom ?
Salut,
en fait si j'enlève cette partie de la vue
et que je fais appelle seulement àCode:
1
2
3
4
5
6
7 <div class="editor-label"> @Html.LabelFor(model => model.NiveauID, "Niveau") </div> <div class="editor-field"> @Html.DropDownList("NiveauID", String.Empty) @Html.ValidationMessageFor(model => model.NiveauID) </div>
ceci marche et ça donne la liste des étudiants avec une petite recherche par nom.Code:@model IEnumerable<MVC3ApplicationPersonneAdresses.Models.Etudiant>
sinon ce que je veux c'est intégrer une recherche multicritère et là je dois utiliser d'autres objets et c'est là où je me bloque.
Merci,
pacifiquement.
OK... revenons un peu en arrière.
En fait, il me semble que les critères de recherche ne font pas vraiment partie du modèle. Ce sont juste des paramètres que tu vas passer à ton contrôleur pour savoir quoi chercher. Donc a priori tu n'as pas besoin de les mettre dans le modèle, c'est juste des paramètres de ton action de contrôleur, non ?
Bon, je dis ça, je ne suis pas un expert de MVC, loin de là, donc c'est peut-être une bêtise...
Salut,
en fait dans mon cas je dois charger les critères de recherche de la base de données, car si jamais j'ajoute des données dans la BD je n'aurai pas besoin de les ajouter manuellement au niveau du volet recherche dans la vue.
Merci.