如何为没有控制器的视图配置Fubu?

时间:2011-03-05 08:02:36

标签: fubumvc

我在一个没有做任何事情的控制器上有Index动作。

public EmptyModel Index()
{
     return null;
}

Index视图只显示一些html,jQuery驱动的ajax和MasterPage在此特定页面上执行所有繁重的工作。当我从它的控制器中删除此动作功能时,将不再显示aspx视图。


更多信息和更新:

在Chad的回答中提到的更改后,现在返回索引视图的url会返回404.这个问题可能存在,因为大多数视图的文件夹结构是在早期的Fubu Framework样式中完成的(使用{{ 1}}并且没有代码隐藏),而不是使用更直观和更新的默认文件夹约定。但是我的分析可能已经结束了。

这是我的FubuRegistry:

View_Page_Type_Declarations.cs

WebAppUrlPolicy:

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 */
}

ViewAndActionInDifferentFolders:

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;
        }
    }

如何重新配置​​Fubu以便我可以在没有操作的情况下使用视图?

需要做哪些更改才能删除上面的操作功能,并且仍然保持相同的功能?

2 个答案:

答案 0 :(得分:3)

在您的FubuRegistry中,在“视图”部分中,添加:

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

例如,整个视图部分可能如下所示:

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

请注意,ASPX和ASCX都可用于无头视图。如果您只想要ASCX文件,则可以使用WebFormViewFacility.IsWebFormControl代替。

答案 1 :(得分:2)

适合我:

Views.RegisterActionLessViews(type => type.Name == "StaticView", 
       chain => chain.Route = new RouteDefinition("StaticView"));