【问题标题】:Orchard routing rule果园路由规则
【发布时间】:2014-07-25 14:31:01
【问题描述】:

如何将其“翻译”到果园

routes.MapRoute(
    name: "Durandal App Views",
    url: "App/views/{viewName}.cshtml",
    defaults: new { controller = "DurandalView", action = "Get" }
);

我尝试根据this 制作主题。

它不起作用并破坏了所有 Orchard 站点

    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())
            }
        };
    }
}`

【问题讨论】:

  • 它是如何不起作用的,它是如何破坏网站的?
  • 你也可以给我们看看你的控制器吗?

标签: routes orchardcms


【解决方案1】:

看起来,您正在主题中创建控制器。
为什么不先尝试将其构建为模块。
浏览一些教程不会有什么坏处,因为 Orchard 强大的可扩展性功能需要一些时间来调整。
Orchard Tutorials
话虽如此,...
1. 创建模块
2. 添加您的路由
3. 创建您的获取操作
4. 在模块的Views 文件夹下获取您的视图,可能在一个名为DurandalView 的文件夹中,如控制器。


然后你就可以调用视图了。你为什么不试试return View(viewName);
你也可以看看这个相关的问题关于如何调用不同的视图SO Question。在那里,您将能够看到为什么您的 ~/App/Views.. 将永远无法工作。或不适用于实际的文件夹结构。

【讨论】:

  • 是的,我不知道为什么,但是当我将它作为模块制作时它可以工作?!!
  • 您可能需要阅读 MVC(约定优于配置?),主题也不是为此而设计的。
【解决方案2】:

其实你看看这个

Route = new Route("/App/views/{viewName}.cshmtl", .... 

您的视图文件名后跟.cshmtl,而它应该是.cshtml

尝试更改文件类型,应该可以。

【讨论】:

    【解决方案3】:

    这是请求的控制器代码

    [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);
        //}
    }
    

    果园别名模块启用

    请求 http://localhost:30321/OrchardLocal/Themes/Durandal/App/views/shell.cshtml 给出 404 并且没有调用任何控制器

    当优先级设置为 100 作为 exmp 时,它会完全阻止 Orchard

    【讨论】:

    • 您的控制器在主题中吗?在任何 .NET 项目中,波浪号将始终有效,直到 'localhost:30321/OrchardLocal'。所以你缺少“主题/Durandal/”。也就是说,如果可行的话。我以前从未尝试过从主题调用控制器中的视图。
    【解决方案4】:

    @ErMasca 这是复制粘贴错误 实际上代码是正确的 - .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())
                }
    

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 2018-10-23
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多