10
votes

Comment afficher des données de plusieurs tables dans une seule vue MVC

J'ai du mal à résoudre le problème avec une vue MVC.

Mon objectif est d'afficher des données de plusieurs tables dans une seule vue MVC. La majeure partie des données provient d'une table appelée détaillants. J'ai aussi une autre table appelée Détaillants, qui stocke le détaillant de la table des détaillants et une liaison de catégorieID à une table de catégorie.

Notez qu'il existe plusieurs enregistrements pour chaque détaillant dans la table des chercheurs.

Dans la vue, je souhaite montrer une liste de détaillants et avec chaque détaillant, je souhaite afficher la liste des catégories qui leur sont applicables.

Quel serait le meilleur moyen d'accomplir cela? Certaines des choses que j'ai essayées sont couvertes dans Pouvez-vous aider avec ce MVC ViewModel Problème?

Cela ne semble toutefois pas être la bonne approche.


1 commentaires

Est-ce en fait une question séparée de l'autre?


3 Réponses :


12
votes

Vous avez besoin d'un modèle de vue spécifiquement adapté aux besoins de cette vue. Lorsque vous définissez vos modèles de vue, vous ne devriez pas penser en termes de tables. Les tables SQL n'ont absolument aucune signification dans une vue. Pensez en ce qui concerne les informations dont vous avez besoin pour montrer et définir vos modèles de vue en conséquence. Ensuite, vous pouvez utiliser Automapper pour convertir entre vos modèles réels et le modèle de vue que vous avez défini.

Alors oubliez tout ce que vous avez dit à propos de Tables et concentration sur la phrase suivante:

Dans la vue, je veux montrer une liste de détaillants et avec chaque détaillant je vouloir montrer la liste des catégories applicable à eux.

Cette phrase est réellement très bonne car elle explique exactement ce dont vous avez besoin. Donc, une fois que vous savez ce que vous avez besoin d'aller de l'avant et de le modéliser: xxx

MAINTENUE Vous tapez fermement votre vue sur IEnumerable . De là, il est facile de faire ce que vous voulez dans la vue:

Affichage d'une liste de détaillants à chaque vente au détail ayant une liste des catégories associées.


2 commentaires

Merci pour votre réponse Darin. En fait, je suis tombé sur le sentier de la vue et je suis assez proche, mais j'ai eu un problème d'obtention de 1 détaillant et de leurs catégories. Au lieu de cela, je reçois une liste de détaillants et une liste distincte de catégories. Je ne pouvais pas vraiment y arriver. J'ai ajouté un lien à cela dans ma question ci-dessus si vous voulez jeter un coup d'oeil.


@Cunners, j'ai consulté votre question initiale. Dans cette question, vous pensez que vous utilisez un modèle de vue, mais ce n'est pas le cas. Coller des modèles comme propriétés de votre modèle de vue n'est pas la solution. Je veux dire déclarer une classe avec le suffixe ViewModel et coller tous vos modèles à l'intérieur n'est pas la bonne approche car vos modèles ne sont pas adaptés aux besoins de la vue. Donc, oubliez vos modèles, oubliez les tables SQL, pensez en termes de quelles informations cette vue a-t-elle besoin et modèle ces classes. Cela vous mènera sur la bonne voie et que MODAPPPER vous aidera à la conversion.



1
votes

Cela pourrait être aussi utile;

vidéo de Chris Pels


0 commentaires

0
votes

Il est simple de faire ce que je dis pas à pas.

  1. Ajouter une chaîne de connexion dans web.config code> fichier p> li>

  2. Sélectionnez des modèles à partir de Solution Explorateur et ajoutez 4 classes comme suit p>

    • 1ère classe pour la première table "J'ai utilisé une table qui ont 3 colonnes p>

      classe publique employée { [Clé] public int emp_id {obtenir; ensemble; } String Public Emp_name {Obtenir; ensemble; } String publique Emp_City {Obtenir; ensemble; } } p> li>

    • 2ème classe pour ma table de tempo p>

      Tempo de classe publique { [Clé] public int id {obtenir; ensemble; } public int emp_id {obtenir; ensemble; } Sujet de chaîne publique {obtenir; ensemble; } Public String Hobby {Obtenir; ensemble; } } p> li> ul>

      Maintenant, je crée une troisième classe dans le dossier modèle contenant une valeur que je souhaite de la table d'emploi et de la table Tempo p>

      public ActionResult file()
      {
          // IList<tempo> tempi=new List<tempo>();
      
          IEnumerable<Alladd> model = null;
      
          // model = getVerifydetails(id);
          // return View(objcpModel);
          List<Alladd> verify = new List<Alladd>();
      
          cn.Open();
      
          if (cn.State == ConnectionState.Open)
          {
              string query = "select Employ.Emp_name,Employ.Emp_id,Employ.Emp_city,tempo.hobby,tempo.id,tempo.subject from Employ inner join tempo on Employ.Emp_id=tempo.Emp_id;";//joining two table 
              SqlCommand cmd=new SqlCommand(query,cn);
              SqlDataReader dr = cmd.ExecuteReader();
      
              while (dr.Read())
              {
                  verify.Add(new Alladd { Emp_name = dr[0].ToString(), Emp_Id= Convert.ToInt32(dr[1].ToString()), Emp_city = dr[2].ToString(), hobby = dr[3].ToString(),ID = Convert.ToInt32(dr[1].ToString()),subject= dr[4].ToString()});//filling values into Alladd class
              }
      
              cn.Close();
          }
      
          return View(verify);
      }
      


0 commentaires