Как настроить Fubu для просмотра без контроллера?

У меня есть Index действие на контроллере, который ничего не делает.

public EmptyModel Index()
{
     return null;
}

Index view просто отображает html, а jJuery-управляемый ajax и MasterPage делают всю тяжелую работу на этой конкретной странице. Когда я удаляю эту функцию действия из ее контроллера, представление aspx больше не будет отображаться.


Дополнительная информация и обновления:

После внесения изменений, упомянутых в ответе Чада, URL-адрес, который использовался для возврата к представлению индекса, теперь возвращает 404. Эта проблема может существовать, поскольку большая часть структуры папок представлений выполнена в раннем стиле Fubu Framework (с View_Page_Type_Declarations.cs и без кода), вместо того, чтобы использовать более интуитивные и более свежие соглашения по умолчанию для папок. Но возможно мой анализ выключен.

Вот моя FubuRegistry:

public WebAppFubuRegistry()
{
    IncludeDiagnostics(true);

    Services(x => x.SetServiceIfNone<IWebAppSecurityContext, WebAppSecurityContext>());

    Applies.ToThisAssembly()
        .ToAssemblyContainingType<HomeController>();


    Actions
        .IncludeClassesSuffixedWithController();


    Routes
        .UrlPolicy<WebAppUrlPolicy>()
        .IgnoreControllerNamespaceEntirely()
        .ConstrainToHttpMethod(action => action.Method.Name.StartsWith("Perform"), "POST");


    Views
        .TryToAttach(x=> x.by<ViewAndActionInDifferentFolders>())
        .TryToAttachWithDefaultConventions()
        .RegisterActionLessViews(WebFormViewFacility.IsWebFormView,
               chain => chain.PartialOnly());

    /*Behavior Code */
}

WebAppUrlPolicy:

public class WebAppUrlPolicy : IUrlPolicy
    {
        public bool Matches(ActionCall call, IConfigurationObserver log)
        {
            return true;
        }

        public IRouteDefinition Build(ActionCall call)
        {
            if(call.IsForHomeController())
                return new RouteDefinition("home");

            if(call.IsAnIndexCall())
                return new RouteDefinition(call.ControllerPrefix());

            var otherRoute = new RouteDefinition(call.ToControllerActionRoute());

            return otherRoute;
        }
    }

ViewAndActionInDifferentFolders:

public class ViewAndActionInDifferentFolders : IViewsForActionFilter
    {
        public IEnumerable<IViewToken> Apply(ActionCall call, ViewBag views)
        {
            if (call.IsForHomeController())
            {
                var viewTokens = views.ViewsFor(call.OutputType()).Where(x => x.Name == "HomeIndexView");
                return new[] { new WebAppViewToken(call, viewTokens, "home") };
            }
            if (call.IsJsonCall())
            {
                return new List<IViewToken>();
            }
            return CreateSingleTokenList(call, views);
        }
        private static IEnumerable<WebAppViewToken> CreateSingleTokenList(ActionCall call, ViewBag views)
        {
            return new[] { new WebAppViewToken(call, views.ViewsFor(call.OutputType())) };
        }
    }

Как мне перенастроить Fubu, чтобы я мог использовать представление без действия?

Какие изменения необходимо внести, чтобы удалить указанную выше функцию действия и сохранить те же функции?

2 ответа

В разделе FubuRegistry в разделе "Представления" добавьте:

.RegisterActionLessViews(WebFormViewFacility.IsWebFormView, chain => chain.PartialOnly());

Например, весь раздел представлений может выглядеть так:

        Views
            .TryToAttachWithDefaultConventions()
            .RegisterActionLessViews(
                                        WebFormViewFacility.IsWebFormView, 
                                        chain => chain.PartialOnly());

Обратите внимание, что вы можете использовать ASPX и ASCX для просмотра без головы. Если вы хотите только файлы ASCX, то вы можете использовать WebFormViewFacility.IsWebFormControl вместо.

Работает для меня:

Views.RegisterActionLessViews(type => type.Name == "StaticView", 
       chain => chain.Route = new RouteDefinition("StaticView"));
Другие вопросы по тегам