Я пытаюсь использовать метод примерно так:
<%Html.RenderAction<NavigatorController>(n => n.Menu());%>
, но получено исключение "Не удалось найти метод открытого действия 'Menu' в контроллере 'WebUI.Controllers.ProductsController'. Почему компилятор пытается найти его в ProductsController, если для этих целей я указал NavigatorController?
Код в моем NavigatorController очень прост:
namespace WebUI.Controllers
{
public class NavigatorController : Controller
{
public string Menu()
{
return "NavigatorController here";
}
}
}
P.S. Я использую RenderAction из библиотеки ASP.NET MVC Features.
Я решил эту проблему. Поскольку @jfar упоминал, что ошибка была чем-то другим, ошибка была в моем модуле фабрики пользовательских контроллеров, который я написал с помощью библиотеки Castle.Windsor, я попытался реализовать инверсию управления, описанную в книге Стивена Сандерсона (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));
После прочтения какой-то статьи я заменяю ее следующим:
_container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<Controller>()
.Configure(c => c.LifeStyle.Transient.Named(c.Implementation.Name.ToLower())));
и теперь все отлично работает