2011-09-01 6 views
7

Je suis nouveau sur MVC et je ne comprends pas comment utiliser correctement les vues partielles. J'essaie d'afficher les flux RSS à partir d'un site de blog dans mon application MVC. J'utilise Razor et j'ai la structure suivante:Action du contrôleur ASP.NET MVC 3 pour une vue partielle

Controllers/HomeController.cs 
Controllers/RssController.cs 

Views/Home/Index.cshtml 

Shared/_Layout.cshtml 
Shared/_Rss.cshtml 

HomeController:

namespace MvcApp.Controllers 
    { 
     public class HomeController : Controller 
     { 
      public ActionResult Index() 
      { 
       ViewBag.Message = "Welcome to ASP.NET MVC!"; 

       return View(); 

      } 

     } 
    } 

RssController:

namespace MvcApp.Controllers 
{ 
    public class RSSFeedController : Controller 
    { 

     public ActionResult RssFeed() 
     { 
      string strFeed = "http://foo.wordpress.com/category/foo/feed/"; 

      using (XmlReader reader = XmlReader.Create(strFeed)) 
      { 
       SyndicationFeed rssData = SyndicationFeed.Load(reader); 

       return View(rssData); 
      } 
     } 

    } 
} 

_Rss.cshtml:

@using System.ServiceModel.Syndication; 
@using System.Text; 
@using System.Xml.Linq; 

<h2>RSSFeed</h2> 
@foreach (var item in ViewData.Model.Items) 
{ 
string URL = item.Links[0].Uri.OriginalString; 
string Title = item.Title.Text; 
StringBuilder sb = new StringBuilder(); 
foreach (SyndicationElementExtension extension in item.ElementExtensions) 
{ 
    XElement ele = extension.GetObject<XElement>(); 
    if (ele.Name.LocalName == "encoded" && ele.Name.Namespace.ToString().Contains("content")) 
    { 
     sb.Append(ele.Value + "<br/>"); 
    } 
} 
Response.Write(string.Format("<p><a href=\"{0}\"><b>{1}</b></a>", URL, Title)); 
Response.Write("<br/>" + sb + "</p>"); 
} 

_Layout. cshtml:Ma confusion est comment puis-je appeler l'action du contrôleur pour obtenir la vue partielle?

+2

Je pense que vous cherchez Html.RenderAction ou quoi que ce soit dans Razor ... – dotjoe

Répondre

4
@Html.RenderAction("RssFeed", "RSSFeed"); 

ou

@Html.Action("RssFeed", "RSSFeed") 

(sans virgule)

+0

Le Html.Action ("RssFeed", "RSSFeed") fonctionne mais comment puis-je obtenir le ViewData du RSSController? – user686924

+0

Tout ce que vous définissez dans ViewData dans votre action est reflété dans une variable Modèle dans la vue, même si elle est partielle. Je veux dire, il est indépendant de la page hôte et du modèle de la page hôte, il a "une vie propre". –

9

Vous devez être appeler la PartialView plutôt que la vue, voici comment une action modifiée regarderait:

public ActionResult RssFeed() 
    { 
     string strFeed = "http://foo.wordpress.com/category/foo/feed/"; 

     using (XmlReader reader = XmlReader.Create(strFeed)) 
     { 
      SyndicationFeed rssData = SyndicationFeed.Load(reader); 

      return PartialView(rssData); 
     } 
    } 

Vous devrez alors avoir une vue partielle appelée RssFeed.

Questions connexes