IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

MVC4 + afficher la dernière entrée d'une table


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut MVC4 + afficher la dernière entrée d'une table
    Bonjour,

    Je débute en ASP.NET, j'ai appris les bases de l'ASP.NET sur le site W3Schools.

    Après avoir lu le tutoriel, j'ai décidé de développer mon projet avec MVC4 (syntaxe razor et avec du C#).

    Bref, j'ai un peu customizé ma page d'accueil, j'ai un peu bidouillé par-ci par là pour obtenir ce que veut.

    Maintenant, je veux créer un système d'annonce sur mon site! J'ai donc créer ma BDD, la table, le modèle et le controlleur qui va avec!

    Là où je bute c'est pour communiquer avec ma vue!

    Dans un premier temps, j'essaie d'afficher la dernière annonce entrée dans la BDD. Le tuto du W3School manque de détail là-dessus donc j'ai tenté de faire quelque chose en copiant le code déjà existant:

    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
    public class HomeController : Controller
        {
            //connection à la table
            private AnnonceModelContext db = new AnnonceModelContext();
     
            public ActionResult Index()
            {
                //Si la talbe n'est pas vide (si il y a au moins une annonce présente dans la table)
                if (db.Annonces.Last() )
                {
                    return View(db.Annonces.Last());
                }
                //Sinon j'envoie un message à la vue
                else
                {
                    ViewBag.Message = "Pas d'annonce pour le moment.";
                    return View();
                }
            }
    }
    Ensuite, je ne sais pas comment faire pour afficher le message (si il existe!) dans ma vue et idem pour afficher les éléments de l'annonce.

    en espérant que vous puissiez m'aider,

    Cordialement,

    sushis

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par défaut
    Je te conseille d'aller faire un tour sur ce site, il y a plein de tutoriels sur MVC4 : http://www.asp.net/mvc

    Pour retourner une liste d'annonces, il faut que tu définisse ton model dans ta vue:
    @model IEnumerable<tonNameSpace.Annonce>

    ensuite tu pourra utiliser du simple HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @foreach(annonce in Model)
    {
        <h2>@annonce.Title</h2>
    }

    N'hésite pas a poser des questions

  3. #3
    Invité
    Invité(e)
    Par défaut
    pierrehenri56,
    je pense qu'il parle de la dernière annonce et pas d'afficher toutes les annonces dans sa vue.

    sushis,
    Si ta vue Home est typée à la classe Annonce alors ton code devrait marcher.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    Merci pour vos réponses!

    J'ai eu quelques soucis avec la méthode Last(). (voir la partit "Casser” une requête afin d’utiliser Linq To Object." de l'article).

    J'ai donc modifié mon code que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class HomeController : Controller
        {
            //connection à la table
            private AnnonceModelContext db = new AnnonceModelContext();
     
            public ActionResult Index()
            {
                    return View(db.Annonces.AsEnumerable().LastOrDefault());  
            }
    }
    Aucun problème de compilation, le problème c'est qu'il semblerait que LastOrDefault() renvoie null alors qu'il y a 2 entrées dans ma table!
    D'ailleurs, si j'utilise Last() l'exception "System.InvalidOperationException: La séquence ne contient aucun élément." se lève!

    Ensuite dans ma vue, j'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //J'ai rajouté ceci
    @model wiki_bird.Models.AnnonceModel
     
    @section featured {
    <section id="annonce" class="content-wrapper">
            <h1>Annonce</h1>
            <p>
                @Html.DisplayFor(model => model.titre)
            </p>
        </section>
    }
    }
    Je me suis inspiré du fichier Details.cshtml créé automatiquement par VS lorsque j'ai créé mon modèle et le contrôleur qui lui est associée.

    J'aimerai aussi afficher la chaîne "Pas d'annonce pour le moment" au cas où si la table est vide! Je dois mettre une condition dans le controlleur mais qu'est que je renvoie à la vue?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ViewBag.Message = "Pas d'annonce pour le moment.";
                    return View();
    Donc si je fais ça il faut que je rajoute une condition pour vérifié si le ViewBag.Message existe dans ma vue?

    Ensuite, pour h2s84: Ma vue typée à la classe Annonce? c'est à dire associé à la classe Annonce?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    Bonjour,

    J'ai continué à chercher et j'ai remarqué qu'il n'est pas possible d'utiliser la fonction Last (lien).

    Il faut que je passe par la fonction FirstOrDefault et qu'ensuite je fasse un reverse!

    Le problème c'est que la requête peut tout prendre pêle-mêle donc il faut que je la trie avant d'utiliser FirstOrDefault (donc par date).

    Ensuite, j'ai juste essayé de capturer une annonce avec Find comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      public ActionResult Index()
            {
                AnnonceModel last_annonce = db.Annonces.Find(2);
                if (last_annonce == null)
                {
                    ViewBag.Message = "Pas d'annonce pour le moment";
                    return View();
                }
                else
                {
                    return View(last_annonce);
                }
            }
    Il y a 2 entrée dans ma BDD!

    Ensuite, dans la vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @model wiki_bird.Models.AnnonceModel
     
    <section id="annonce" class="content-wrapper">
            <h1>Annonce</h1>
            <p>
               @ViewBag.Message
                <br />
               @Html.DisplayFor(model => model.titre)
            </p>
        </section>
    Le ViewBag.Message s'affiche correctement mais cela signifie que l'objet AnnonceModel est null et c'est cela qui me pose problème!

  6. #6
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Et pourquoi ne ferais-tu pas un tri descendant + FirstOrDefault() ou Take(1) sur l'identifiant auto de ta table?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    Le problème c'est que ma requête ne renvoi rien!

    Que j'utilise FirstOrDefault() ou Find() cela me renvoie toujours null!

    J'ai pourtant bien suivit les autres exemples et ma table contient bien 2 entrée.

    Voici un screenshoot de ma table.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/08/2012, 12h36
  2. Annuler dernière entrée d'une table
    Par robyseb dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/10/2011, 14h54
  3. [MySQL] Afficher les entrées d'une table qui contient un mot précis
    Par anarchoi dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 02/05/2007, 21h15
  4. [MySQL] Question simple: afficher tous les entrées d'une table en liens
    Par anarchoi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/04/2007, 12h04
  5. Réponses: 6
    Dernier message: 01/08/2006, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo