asp.netasp.net-mvc-2

The IControllerFactory ... did not return a controller for the name 'Rss'


I have a Controller named RssController which looke like so

public partial class RssController : MVCExceptionBaseController
{

    public virtual ActionResult Display()
    {
        var viewModel = new RssList();
        return PartialView("Display", viewModel);
    }
}

When I click on the Log In link in my navigation I get the following message:

The IControllerFactory 'GodsCreationTaxidermy.Helpers.StructureMapControllerFactory' did not return a controller for the name 'Rss'.

The RSS is called from Site.Mater like so:

<% Html.RenderAction("Display", "Rss");%>

Display is a partial class which is used to display the Rss feed and it looks like this:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<ul>
<%  
    RssList viewModel = ViewData.Model as RssList;

    if (viewModel.Feeds.Count() > 0)
    {
        foreach (SelectListItem item in viewModel.Feeds)
        { %>
        <li>
            <%
              Response.Write(String.Format("<a href='{0}' target='_blank'>{1}  More</a>", item.Value, item.Text.TruncateString(30)));
            }%>
        </li>
    <% }%>
 </ul>

Any other links I click work fine, except Login (LogIn is in it's own area, could this be causing the issue, if so how would I go about resolving it?)


Solution

  • By default, the Html.RenderAction method won't search for controllers outside the current area. In order for a controller inside the LogIn area to find the Rss controller, you need to use one of the overloads of the RenderAction method:

    <% Html.RenderAction("Display", "Rss", new { area = "" }); %>
    

    The "empty string" area is a container for any controller that isn't part of an area.