2011-09-01 33 views
7

Soy nuevo en MVC y no entiendo cómo utilizar vistas parciales correctamente. Estoy tratando de mostrar los canales RSS de un blog en mi aplicación MVC. Estoy usando la maquinilla de afeitar y tengo la siguiente estructura:ASP.NET MVC acción 3 controlador de vista parcial

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> 

Mi confusión es ¿cómo llamo a la acción del controlador para obtener la vista parcial?

+2

Creo que estás buscando Html.RenderAction o lo que sea en Razor ... – dotjoe

Respuesta

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

o

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

(sin coma)

+0

El Html.Action ("RssFeed", "RSSFeed") funciona, pero ¿cómo debo obtener ViewData desde el RSSController? – user686924

+0

Lo que establezca en ViewData en su acción, se refleja en una variable de modelo en la vista, incluso si es parcial. Quiero decir, es independiente de la página de host y del modelo de la página de host, tiene "vida propia". –

9

Necesitas estar llamando a la PartialView en lugar de la vista, así es como una acción modificada se vería:

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

Entonces necesitaría tener una vista parcial llamada RssFeed.

Cuestiones relacionadas