您可以嘗試創建一個自定義ContentTagDefinition和HtmlFormatCompiler註冊。
例如:
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;
}
}
任何
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;
}
}
註冊兩個標籤
HtmlFormatCompiler compiler = new HtmlFormatCompiler();
compiler.RegisterTag(new IsNullOrEmptyTagDefinition(), true);
compiler.RegisterTag(new AnyTagDefinition(), true);