Routes 果园路由规则

Routes 果园路由规则,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

如何将其转化为Orchard

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约定而不是配置?主题也不适用于此。