【问题标题】:The IControllerFactory ... did not return a controller for the name 'Rss'IControllerFactory ...没有返回名称为“Rss”的控制器
【发布时间】:2011-12-12 22:45:41
【问题描述】:

我有一个名为 RssController 的控制器,看起来像这样

public partial class RssController : MVCExceptionBaseController
{

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

当我点击导航中的登录链接时,我收到以下消息:

IControllerFactory 'GodsCreationTaxidermy.Helpers.StructureMapControllerFactory' 没有 返回名称为“Rss”的控制器。

从 Site.Mater 调用 RSS,如下所示:

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

Display 是一个用于显示 Rss 提要的部分类,它看起来像这样:

<%@ 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>

我点击的任何其他链接都可以正常工作,除了登录(登录在它自己的区域中,这是否会导致问题,如果是,我将如何解决它?)

【问题讨论】:

  • 或许你应该问问工厂是什么问题?
  • 这和使用Areas有什么关系吗?这是我第一次与他们合作,不确定我是否在这里做错了什么。
  • 其他区域有效吗?这是一个自定义的 ControllerFactory 吗?那么,我会研究它如何找到控制器。这就是我问工厂的意思。

标签: asp.net asp.net-mvc-2


【解决方案1】:

默认情况下,Html.RenderAction 方法不会搜索当前区域之外的控制器。为了让 LogIn 区域内的控制器找到 Rss 控制器,您需要使用 RenderAction 方法的重载之一:

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

“空字符串”区域是任何不属于该区域的控制器的容器。

【讨论】:

  • 谢谢安迪,你真棒。这正是我一直在寻找的并且完美地工作
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多