c#-4.0 - 是否可以使用自定义类型属性的内容创建 Orchard 自动路线?

标签 c#-4.0 orchardcms routes permalinks

我有一个 Orchard cms 模块,设置了一些附加的内容类型,并通过代码添加了一个 AutoRoute 组件。 一切都很完美,但是我对默认的永久链接模式不满意。

我想要做的是添加自定义模式并使用我的内容类型中的公共(public)属性之一。就我而言,自定义类型有一个名为 ClubName 的公共(public)属性,我希望使用它(从路由角度来看,它更有意义)。
Orchard 部件类名称称为 TrackPart .

我已经尝试过{Content.TrackPart.ClubName} , {Content.Track.ClubName} , {ContentItem.TrackPart.ClubName} , {Content.TrackPart.ClubName}以及其他各种变体,但似乎没有任何效果。

我对 Orchard 真的很陌生,所以我很可能错过了一些简单的东西。
任何帮助将不胜感激。

为了响应 @Bertrand-le-roy 的反馈,我通过复制示例 token 创建了自己的 token 。我现在可以在下拉菜单中查看 token 并选择它。但是路线模式仍然不起作用。

我只能假设我误解了 Evaluate() 函数的 context.For用法。看起来我没有得到我需要的数据

这是我到目前为止所拥有的。

public class TrackPartTokens : ITokenProvider { private readonly IContentManager _contentManager;

<pre><code> public TrackPartTokens(IContentManager contentManager) { _contentManager = contentManager; } public Localizer T { get; set; } public void Describe(dynamic context) { context.For("Track", T("Track"), T("Tokens for Track")) .Token("ClubName", T("ClubName"), T("The name of the club.")) ; } public void Evaluate(dynamic context) { context.For<TrackPart>("Track") .Token("ClubName", (Func<TrackPart, object>)(field => field.ClubName)) .Chain("ClubName", "ClubName", (Func<TrackPart, object>)(field =>field.ClubName)) ; }</code> </code></pre> <p>The above code was based on the DateTimeField token inside the Orchard.Fields module.</p>

context.For("DateTimeField") .Token("Date", (Func)(field => field.DateTime)) .Chain("Date", "Date", (Func)(field => field.DateTime));

最佳答案

我也遇到了同样的问题。

经过一些故障排除后,我设法通过将我的实现更改为以下内容来使自动路由正常工作(适应您的示例,请注意,您的设置可能需要对 linq 函数进行一些更改):

在您的 token 类中:

  • 首先添加一条 using System.Linq 语句。
  • 然后将您的 Evaluate 实现更改为以下内容:

    context.For<IContent>("Content")
           .Token("ClubName", (Func<IContent>, object>)(content => 
                content.ContentItem.Parts.OfType<TrackPart>().First().ClubName));
    
  • 确保 Migrations.cs 中的 AutoroutePart 设置使用 Content-prefix。喜欢:

    .WithPart("AutoroutePart", partBuilder =>
        partBuilder
        .WithSetting("AutorouteSettings.AllowCustomPattern", "true")
        .WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", "false")
        .WithSetting("AutorouteSettings.PatternDefinitions",
        @"[{Name:'Track', Pattern:'{Content.ClubName}', 
            Description:'Your description'}]")
        .WithSetting("AutorouteSettings.DefaultPatternIndex", "0"))
    

Orchard 源中的 TokenManager 类似乎存在一些问题,只允许目标参数等于“Content”,以便调用:_data.TryGetValue(target, out value) 工作(TokenManager.cs ,第 67 行)。我尝试了多种不同的设置,但 _data 字典始终只包含“Content”键。

关于c#-4.0 - 是否可以使用自定义类型属性的内容创建 Orchard 自动路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11716230/

相关文章:

c#-4.0 - TPL TaskFactory.FromAsync 与具有阻塞方法的任务

layout - OrchardCMS 管理页面的布局

php - Laravel:CRUD 路由有一个空参数

cakephp 路由修改 Controller 名称/获取 Controller 名称

asp.net - 由于asp.net中对象的当前状态,因此操作无效。

asp.net - ASP.NET 中的 HTML 转 PDF

c# - 用于前端数据库访问的 Orchard 小部件

entity-framework - Orchard CMS 是否支持带有 Entity Framework 的 MVC4

Ruby Cucumber 说路径在 Rake Routes 显示路径时找不到路径

c#-4.0 - Nodes() 与 DescendantNodes() 用法?