Как настроить 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"));