C# ASP.NET MVC Html.RenderAction方法

C# ASP.NET MVC Html.RenderAction方法,c#,asp.net-mvc,inversion-of-control,castle-windsor,C#,Asp.net Mvc,Inversion Of Control,Castle Windsor,我尝试使用如下方法: <%Html.RenderAction<NavigatorController>(n => n.Menu());%> 另外,我使用ASP.NET MVC功能库中的渲染 我解决了这个问题。正如@jfar提到的错误是另外一回事,错误是在我使用Castle.Windsor库编写的自定义控制器工厂模块中,我试图实现Steven Sanderson书(Pro ASP.NET MVC Framework)中描述的控制反转。因此,我注册所有控制器类型的方法

我尝试使用如下方法:

<%Html.RenderAction<NavigatorController>(n => n.Menu());%>
另外,我使用ASP.NET MVC功能库中的渲染

我解决了这个问题。正如@jfar提到的错误是另外一回事,错误是在我使用Castle.Windsor库编写的自定义控制器工厂模块中,我试图实现Steven Sanderson书(Pro ASP.NET MVC Framework)中描述的控制反转。因此,我注册所有控制器类型的方法是:

    _container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
                IEnumerable<Type> controllerTypes = from type in Assembly.GetExecutingAssembly().GetTypes()
                                                    where typeof(IController).IsAssignableFrom(type)
                                                    select type;

container.Register(Component.For(controllerTypes).LifeStyle.Is(LifestyleType.Transient));
\u container=新WindsorContainer(新的XML解释器(新的ConfigResource(“castle”));
IEnumerable controllerTypes=来自Assembly.getExecutionGassembly()中的类型
其中typeof(IController).IsAssignableFrom(type)
选择类型;
container.Register(Component.For(controllerTypes.LifeStyle.Is)(LifestyleType.Transient));
读了一些文章后,我将其替换为:

_container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
                .BasedOn<Controller>()
                .Configure(c => c.LifeStyle.Transient.Named(c.Implementation.Name.ToLower())));
\u container.Register(AllTypes.fromsassembly(Assembly.getExecutionGassembly())
.BasedOn()
.Configure(c=>c.lifety.Transient.Named(c.Implementation.Name.ToLower());

现在一切正常

您可以在视图中使用以下语句

<% Html.RenderAction("Menu", "Navigator"); %>

此错误一定发生在其他地方

<%Html.RenderAction<NavigatorController>(n => n.Menu());%>
n.Menu());%
此代码将始终使用NavigationController。

如jfar所说:


这个错误一定发生在其他地方

检查你的路线


我猜你修改了你的路线,它总是为ProductsController选择一条路线。

我在使用Html.RenderAction之前使用了这条语句,但是使用Html.RenderAction(“菜单”、“导航器”);效果是same@Kai我正在使用asp.NETMVC2,它在这里工作。您的mvc版本是什么?我正在使用ASP.NET mvc 1和ASP.NET mvc功能库,我将其添加到我的项目中作为使用渲染方法的参考。您可以发布您的路由配置吗?听起来问题可能就在这里。您可以将
AllTypes.FromAssembly(Assembly.getExecutionGassembly()
替换为
AllTypes.FromThisAssembly()
,请参阅文档
<%Html.RenderAction<NavigatorController>(n => n.Menu());%>