2011-09-01 17 views
7

Sono nuovo su MVC e non capisco come utilizzare correttamente le viste parziali. Sto cercando di visualizzare i feed RSS da un sito di blog nella mia app MVC. Sto usando il rasoio e ho la seguente struttura:Azione controller ASP.NET MVC 3 per vista parziale

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:

<div id="main"> 
    @RenderBody() 
</div> 
<div id="BlogContent"> 
    @Html.Partial("_Rss"); 
</div> 

La mia confusione è: come posso chiamare l'azione del controller per ottenere la vista parziale?

+2

Penso che tu sia alla ricerca di Html.RenderAction o qualunque cosa sia in Razor ... – dotjoe

risposta

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

o

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

(senza virgola)

+0

Il Html.Action ("RSS feed", "RSS feed"), funziona, ma come mi dovrebbe ottenere il Viewdata dal RSSController? – user686924

+0

Qualsiasi cosa tu abbia impostato in ViewData nella tua azione, si riflette in una variabile Model nella vista, anche se parziale. Voglio dire, è indipendente dalla pagina host e dal modello della pagina host, ha "una vita propria". –

9

Devi essere chiamando il PartialView piuttosto che la vista, ecco come un'azione modificata apparirebbe:

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); 
     } 
    } 

Dovresti quindi avere una vista parziale denominata RssFeed.

Problemi correlati