2010-01-04 4 views
0

J'ai développé une page de nouvelles pour un site Web dans ASP.NET MVC et son URL étant localhost/News. Pour cela, j'ai développé un contrôleur, un modèle et une vue qui parcourent tous les éléments d'un modèle et les affiche. Cette page affiche toutes les Nouvelles disponibles dans la base de données dans l'ordre décroissant de la date. J'ai utilisé routage News/{id} pour afficher ces nouvelles particulières dans les détails.Section des nouvelles avec ASP.NET MVC

Que dois-je faire, si je veux afficher seulement 5 derniers articles sur ma page d'accueil? Le contrôleur peut-il être réutilisé? Ou je vais devoir réécrire le code pour aller chercher des nouvelles dans ma base de données?

+0

Veuillez fournir quelques détails, car cela n'a pas beaucoup de sens maintenant. Quelle base de données utilisez-vous? Comment obtenez-vous des nouvelles de la base de données? Si vous voulez prendre seulement 5, prenez 5. Cela pourrait ressembler à 'db.News.OrderByDescending (n => n.Date) .Take (5)' – LukLed

+0

La base de données devrait être non pertinente, c'est une question d'implémentation de modèle pas d'interaction de base de données . Ils ont déjà fourni suffisamment d'informations pertinentes. Le vote négatif est assez dur. – nathanchere

Répondre

1

La façon dont j'aborderais cela est d'avoir une vue qui prend une liste IQueryable de nouvelles.

Je disposerais alors d'une vue partielle qui ne restitue qu'un seul élément d'information.

Ma vue serait alors itérée via la collection IQueryable et afficherait tous les éléments qu'elle trouverait en utilisant foreach (NewsItem item in Model){}. Chaque élément d'actualité sera rendu dans la vue partielle.

À ce stade, cela satisfait à l'exigence de rendre les nouvelles. Si vous vouliez seulement montrer le top 5, alors je changerais mon itinéraire pour qu'il ressemble à News/{top}. De cette façon, je pourrais transmettre un numéro au contrôleur pour ramener le top 5.

@ Conseils de LukLed sur l'utilisation Prenez la bonne façon si vous utilisez LINQ. Sinon, utilisez votre propre algorithme pour obtenir les 5 premiers messages.

Quoi qu'il en soit, dans votre vue Index, vous pourriez avoir un lien qui dit, et ceci n'est pas testé, quelque chose comme;

<%= Html.ActionLink("Top 5", "Index", new { top=5 }) %> 

Vous ne savez pas si ce qui précède est bon, mais vous avez l'idée.

Maintenant, vous pouvez avoir plusieurs liens qui permettent de n premiers messages.

+0

Merci pour les commentaires. Laissez-moi vous expliquer le scénario dans lequel je veux l'utiliser. Je veux afficher les nouvelles récentes (d'où le top 5) sur la page en bas à droite d'une page d'accueil d'entreprise typique. J'ai aussi un lien au bas des dernières nouvelles disant "More News" qui va à www.domain.com/News/. Il affiche toutes les nouvelles dans la base de données. Donc je veux 5 hyperliens pour afficher le top 5 sur la page d'accueil elle-même. Ma seule question est que je dois utiliser à nouveau Database Context on Homepage ou utiliser quelque chose comme News/Top/5 depuis la page d'accueil (comme pour un appel de service). Si ce dernier est possible, alors je veux savoir comment le faire –

0

J'ai eu quelques idées après avoir fait des recherches. Je veux savoir ce peut être utile:

  1. Utilisation de la vue partielle de sorte qu'il suit DRY Principe
  2. La conception d'une méthode avec JsonResult comme un type de retour et l'utiliser avec jquery.

Toutes les autres suggestions sont les bienvenues.

0

Votre commentaire sur l'utilisation de vues partielles avec jQuery est tout à fait logique.

Je n'ai jamais vraiment compris pourquoi vous vouliez réutiliser vos actions.

Faire ce que vous voulez avec des vues partielles et jQuery est comme les autres le font. C'est rapide et ça a l'air chic et lisse.

1

J'ai récemment eu à peu près la même question. J'ai fini par utiliser l'implémentation de MVC Futures RenderAction.Un bon exemple expliquant comment l'utiliser est ici:

http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx

Fondamentalement, vous auriez quelque chose comme ça dans votre ArticleController (je ne l'appelle pas le mien « NewsController » simplement parce que je suis paranoïaque à ce sujet en supposant "Nouvelles" est une collection de type "Nouveau": P) ...

public ActionResult SidebarBox() 
{ 
// I use a repository pattern to get records, just replace it with whatever you use 
// also replace *.Take(5)* with however many you want returned 
return View(repoArticles.GetAllArticles().Take(5).ToList()); 
} 

et votre maître (ou partout où vous voulez afficher) vous pouvez utiliser:

<% Html.RenderAction<ArticleController>(c => c.SidebarBox()); %> 

Alors ayez une vue avec juste le code pour votre boîte latérale.

+1

Pour vous faciliter la vie (en supposant que vous utilisiez l'outillage standard), n'oubliez pas de générer votre vue SidebarBox en tant que vue partielle fortement typée de la liste de types. – nathanchere

0

La façon dont j'aborderais cela est d'avoir une vue qui prend une liste IQueryable de nouvelles.

Je disposerais alors d'une vue partielle qui ne restitue qu'un seul élément d'information.

Ma vue serait ensuite itérée via la collection IQueryable et afficherait tous les éléments qu'elle trouverait en utilisant foreach (élément Élément de l'article dans le modèle) {}. Chaque élément d'actualité sera rendu dans la vue partielle.

À ce stade, cela satisfait à l'exigence de rendre les nouvelles. Si vous vouliez seulement montrer le top 5 alors je changerais mon itinéraire pour être quelque chose comme News/{top}. De cette façon, je pourrais transmettre un numéro au contrôleur pour ramener le top 5.

@ Conseils de LukLed sur l'utilisation Prenez la bonne façon si vous utilisez LINQ. Sinon, utilisez votre propre algorithme pour obtenir les 5 premiers messages.