Routes 果园路由规则
如何将其转化为OrchardRoutes 果园路由规则,routes,orchardcms,Routes,Orchardcms,如何将其转化为Orchard routes.MapRoute( name: "Durandal App Views", url: "App/views/{viewName}.cshtml", defaults: new { controller = "DurandalView", action = "Get" } ); 我试图使主题基于 它不工作,破坏了果园的所有场地 public class Routes : IRouteProvider { publ
routes.MapRoute(
name: "Durandal App Views",
url: "App/views/{viewName}.cshtml",
defaults: new { controller = "DurandalView", action = "Get" }
);
我试图使主题基于
它不工作,破坏了果园的所有场地
public class Routes : IRouteProvider {
public void GetRoutes(ICollection<RouteDescriptor> routes) {
foreach (var routeDescriptor in GetRoutes())
routes.Add(routeDescriptor);
}
public IEnumerable<RouteDescriptor> GetRoutes()
{
return new[] {
new RouteDescriptor {
Priority = 5,
Route = new Route(
"/App/views/{viewName}.cshmtl",
new RouteValueDictionary {
{"area", "Durandal"},
{"controller", "DurandalView"},
{"action", "Get"}
},
new RouteValueDictionary(),
new RouteValueDictionary {
{"area", "Durandal"}
},
new MvcRouteHandler())
}
};
}
}`
事实上,如果你看这个
Route = new Route("/App/views/{viewName}.cshmtl", ....
视图文件名应为.cshtml时后跟.cshmtl
尝试更改文件类型,这样就可以了 这是请求的控制器代码
[Themed]
public class DurandalViewController : Controller
{
private readonly IContentManager _contentManager;
private readonly IWorkContextAccessor _workContextAccessor;
public DurandalViewController(IContentManager contentManager, IWorkContextAccessor workContextAccessor, IShapeFactory shapeFactory, IOrchardServices services)
{
_contentManager = contentManager;
_workContextAccessor = workContextAccessor;
Shape = shapeFactory;
Services = services;
T = NullLocalizer.Instance;
}
dynamic Shape { get; set; }
public IOrchardServices Services { get; private set; }
public Localizer T { get; set; }
[HttpGet]
public ActionResult Get(string viewName)
{
return View("~/App/views/" + viewName + ".cshtml");
}
//public ActionResult Display(int id)
//{
// var contentItem = _contentManager.Get(id, VersionOptions.Published);
// dynamic model = _contentManager.BuildDisplay(contentItem);
// var ctx = _workContextAccessor.GetContext();
// ctx.Layout.Metadata.Alternates.Add("Layout_Null");
// return new ShapeResult(this, model);
//}
}
已启用Orchard别名模块
请求http://localhost:30321/OrchardLocal/Themes/Durandal/App/views/shell.cshtml 提供404,但未调用任何控制器
当优先级设置为100时,它将完全停止运行
这是复制粘贴错误
实际上代码是正确的-.cshtml
new RouteDescriptor {
Priority = -15,
Route = new Route(
"/App/views/{viewName}.cshtml",
new RouteValueDictionary {
{"area", "Durandal"},
{"controller", "DurandalView"},
{"action", "Get"}
},
new RouteValueDictionary(),
new RouteValueDictionary {
{"area", "Durandal"}
},
new MvcRouteHandler())
}
看起来,您正在一个主题中创建控制器。 为什么不先把它作为一个模块来构建呢。 阅读一些教程不会有什么坏处,因为Orchard强大的可扩展性功能需要一点时间。 话虽如此,。。。 1.创建一个模块 2.添加您的路由 3.创建您的Get操作 4.在模块的视图文件夹下获取视图,可能位于名为DurandalView的文件夹中,如控制器
然后你就可以调用视图了。为什么不尝试返回ViewName;你也可以看看这个关于如何调用不同视图的相关问题。在那里,您将能够看到为什么您的~/App/Views。。这是行不通的。或不适用于实际的文件夹结构 它是如何不工作的,它是如何破坏网站的?你能给我们看一下你的控制器吗?你的控制器在主题中吗?。在任何.NET项目中,瓷砖都将始终有效。所以您缺少了“Themes/Durandal/”。也就是说,如果这行得通的话。我以前从未尝试从主题调用控制器中的视图。是的,我不知道为什么,但当我将其作为模块时,它工作了?!!您可能需要阅读MVC约定而不是配置?主题也不适用于此。