【问题标题】:IsNullOrEmpty(string) and List.Count > 0 in mustache-sharpIsNullOrEmpty(string) 和 List.Count > 0 in mustache-sharp
【发布时间】:2016-10-30 23:29:54
【问题描述】:

我使用mustache-sharp作为模板引擎

我想知道使用这个模板引擎是否还有两个条件可供检查

1) IsNullOrEmpty(string)  => e.g. {{#IsNullOrEmpty MyName}}} {{/IsNullOrEmpty}}
2) List.Count > 0         => e.g. {{#Any Persons}} {{/Any}}

谁能指导我如何创建像上面这样的标签?

【问题讨论】:

    标签: c# template-engine mustache


    【解决方案1】:

    您可以尝试创建一个自定义的ContentTagDefinition并在HtmlFormatCompiler中注册。

    例如:

    1. IsNullOrEmpty

      public class IsNullOrEmptyTagDefinition : ContentTagDefinition
      {
          private const string conditionParameter = "condition";
      
          public IsNullOrEmptyTagDefinition()
              : base("IsNullOrEmpty")
          {}
      
          public override IEnumerable<TagParameter> GetChildContextParameters()
          {
              return new TagParameter[0];
          }
      
          public override bool ShouldGeneratePrimaryGroup(Dictionary<string, object> arguments)
          {
              object condition = arguments[conditionParameter];
              return isConditionSatisfied(condition);
          }
      
          protected override IEnumerable<TagParameter> GetParameters()
          {
              return new TagParameter[] { new TagParameter(conditionParameter) { IsRequired = true } };
          }
      
          protected override bool GetIsContextSensitive()
          {
              return false;
          }
      
          private bool isConditionSatisfied(object condition)
          {
              if (condition == null)
              {
                  return true;
              }
      
              return condition is string ? string.IsNullOrEmpty(condition as string) : false;
          }
      
      }
      
    2. 任何

      public class AnyTagDefinition : ContentTagDefinition
      {
          private const string conditionParameter = "condition";
      
          public AnyTagDefinition()
              : base("Any")
          {}
      
          public override IEnumerable<TagParameter> GetChildContextParameters()
          {
              return new TagParameter[0];
          }
      
          public override bool ShouldGeneratePrimaryGroup(Dictionary<string, object> arguments)
          {
              object condition = arguments[conditionParameter];
              return isConditionSatisfied(condition);
          }
      
          protected override IEnumerable<TagParameter> GetParameters()
          {
              return new TagParameter[] { new TagParameter(conditionParameter) { IsRequired = true } };
          }
      
          protected override bool GetIsContextSensitive()
          {
              return false;
          }
      
          private bool isConditionSatisfied(object condition)
          {
              if (condition is IEnumerable)
              {
                  return (condition as IEnumerable).Cast<object>().Any();
              }
      
              return false;
          }
      
      }
      
    3. 注册两个标签

      HtmlFormatCompiler compiler = new HtmlFormatCompiler();
      compiler.RegisterTag(new IsNullOrEmptyTagDefinition(), true);
      compiler.RegisterTag(new AnyTagDefinition(), true);
      

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 2021-02-21
      • 2010-09-25
      • 1970-01-01
      • 2012-10-23
      相关资源
      最近更新 更多