ASP.NET MVC Html.RenderAction метод - PullRequest
       9

ASP.NET MVC Html.RenderAction метод

1 голос
/ 01 ноября 2010

Я пытаюсь использовать метод примерно так:

<%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())));

и теперь все отлично работает

Ответы [ 3 ]

1 голос
/ 01 ноября 2010

Эта ошибка должна происходить где-то еще.

<%Html.RenderAction<NavigatorController>(n => n.Menu());%>

Этот код всегда будет использовать NavigationController.

1 голос
/ 01 ноября 2010

вы можете использовать следующее утверждение в вашем представлении.

<% Html.RenderAction("Menu", "Navigator"); %>
0 голосов
/ 01 ноября 2010

Как сказал jfar:

Эта ошибка должна происходить где-то еще.

Проверьте маршруты.

Полагаю, вы изменили свои маршруты, и он всегда выбирает один для ProductsController.

...