2012-05-16 7 views
2

AnsweredMVC avec Vue partielle Liste

Dbaseman était correcte mais pour simplifier tout cela, je ne suis pas besoin d'un modal et mon code ressemble à ceci maintenant:

[ChildActionOnly] 
public ActionResult RecentNews() 
{ 
    return PartialView(db.Articles.ToList()); 
} 

et

@{Html.RenderAction("RecentNews");} 

Ci-dessous mon ancien code qui ne fonctionnait pas

J'ai du mal à faire fonctionner ce qui suit, je ne sais pas si je suis sur le point d'être sur la bonne voie ou non. Le code fonctionne bien si je crée une vue mais pas si je crée une vue partielle et l'ajoute à d'autres vues. Quoi que j'essaie, il semble que j'obtiens l'erreur: La référence d'objet n'est pas définie sur une instance d'un objet.

À mon avis, j'ai:

@Html.Partial("RecentNews") 

Mon action ressemble à ceci:

public ActionResult RecentNews() 
{ 
    var rn = (from m in db.Articles 
       select new RecentNews 
       { 
        ArticleHeading = m.ArticleHeading 
       }); 
    return View(rn); 

    //return View(db.Articles.ToList()); 
} 

Mon modal:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace melbournesportsstadium.Models 
{ 
    public class RecentNews 
    { 
     public string ArticleHeading { get; set; } 
    } 
} 

Et mon RecentNews.cshtml:

@model List<melbournesportsstadium.Models.RecentNews> 

<table> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ArticleHeading) 
     </td> 
    </tr> 
} 

</table> 

Quelqu'un peut-il m'aider s'il vous plaît à obtenir ce travail?

Répondre

2

Vous obtenez une "référence null" car la vue partielle ne reçoit aucun modèle; @ Html.Partial ne retourne pas au contrôleur, il rend la vue directement. Changez-le en @ Html.Action ("RecentNews") et cela devrait fonctionner.

+0

Merci dbaseman, j'ai essayé ça et ça fonctionne en quelque sorte mais pour une raison quelconque, il tire la vue partielle dans une vue complète avec la _layout. Savez-vous pourquoi ce serait ??? – Bojangles

+0

@Bojangles Hm. Les seuls endroits que je connaisse où une mise en page peut être définie sont 1) dans la vue elle-même, 2) web.config dans le chemin de la vue ou un chemin parent – McGarnagle

+0

@Bojangles Désolé, je voulais écrire ** _ ViewStart.cshtml **. Avez-vous un de ceux dans votre projet? Une mise en page par défaut pourrait être définie ici ... – McGarnagle