ASP.NET MVC 3 Controller Actions for Partial View

I am new to MVC and I do not understand how to use partial views correctly. I am trying to display RSS feeds from a blog site in my MVC application. I use Razor and I have the following structure:

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> 

My misunderstanding is how can I call a controller action to get a partial view?

+7
source share
2 answers

You should call PartialView , not the view, here, what the modified action will look like:

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

Then you need a partial view called RssFeed .

+9
source
 @Html.RenderAction("RssFeed", "RSSFeed"); 

or

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

(no semicolon)

+4
source

All Articles