【问题标题】:How can i write the greater than condition in UGC Conditional statement我如何在 UGC 条件语句中编写大于条件
【发布时间】:2012-08-15 19:07:37
【问题描述】:

我在代码中使用了 ugc 条件语句,equals 条件工作正常,但如何使用其他条件运算符,如 ">" "

<%
HttpContext.Current.Items["CommentCount"] = 0;
%>

<ugc:Choose runat="server">
  <ugc:When test="ugcItemStats.numberOfComments > CommentCount" runat="server">
         HTML1
  </ugc:When>
  <ugc:Otherwise runat="server">
         HTML2
  </ugc:Otherwise>
</ugc:Choose>

应该使用什么运算符,如果 numberofComments 大于 0,我尝试过这样的方式,也尝试过“notequals”而不是“>”,但它不起作用。

请推荐

【问题讨论】:

    标签: tridion tridion-2011 ugc


    【解决方案1】:

    Tridion ug:when 仅适用于“equal”和“==”,如果您想使用其他运算符,则必须为此创建其他客户控件。

    我已经创建了,我希望它可以与 "==,>=",,

    它在我的项目中工作。

    using System;
    using System.ComponentModel;
    using System.Globalization;
    using System.Reflection;
    using System.Text.RegularExpressions;
    using System.Web;
    using System.Web.UI;
    
    namespace Tridion.ContentDelivery.UGC.Web.UI
    {
        [DefaultProperty("Test"), ToolboxData("<{0}:WhenCond runat=server></{0}:WhenCond>"), ParseChildren(ChildrenAsProperties = false)]
        public class WhenCond : BaseUGCServerControl
        {
            private string test;
            private static Regex pattern = new Regex(@"\.");
            protected virtual bool Condition()
            {
                if (this.test == null)
                {
                    return false;
                }
                string[] sep = new string[] { "==", "<", ">", "<=", ">=" ,"!="};
                string[] testArray = test.Split(sep, StringSplitOptions.None);
                if (testArray.Length == 2)
                {
                    object value1 = EvaluateVariable(testArray[0].Trim(), HttpContext.Current);
                    object value2 = EvaluateVariable(testArray[1].Trim(), HttpContext.Current);
                    if (value1 != null && value2 != null)
                    {
                        if (isNumeric(value1.ToString(), NumberStyles.Number) && isNumeric(value2.ToString(), NumberStyles.Number))
                        {
                            return NumericCondition(double.Parse(value1.ToString()), double.Parse(value2.ToString()), GetSepartor());
                        }
                        else
                        {
                            return AlphaNumericCondition(value1.ToString(), value2.ToString(), GetSepartor());
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
                return false;
            }
    
            public static object EvaluateVariable(string varProperty, HttpContext usedContext)
            {
                if (!string.IsNullOrEmpty(varProperty))
                {
                    string[] strArray = pattern.Split(varProperty);
                    if (!string.IsNullOrEmpty(strArray[0]))
                    {
                        object obj2 = usedContext.Items[strArray[0]];
                        if (obj2 != null)
                        {
                            object obj3 = obj2;
                            for (int i = 1; i < strArray.Length; i++)
                            {
                                if (obj3 != null)
                                {
                                    string str = strArray[i];
                                    if (!string.IsNullOrEmpty(str))
                                    {
                                        string str2 = str.Substring(0, 1);
                                        string str3 = str.Substring(1);
                                        string name = str2.ToUpper() + str3;
                                        PropertyInfo property = obj3.GetType().GetProperty(name);
                                        if (property != null)
                                        {
                                            obj3 = property.GetValue(obj3, null);
                                        }
                                    }
                                }
                            }
                            return obj3;
                        }
                    }
                }
                return null;
            }
    
            public bool isNumeric(string val, System.Globalization.NumberStyles NumberStyle)
            {
                Double result;
                return Double.TryParse(val, NumberStyle, System.Globalization.CultureInfo.CurrentCulture, out result);
            }
    
            private string GetSepartor()
            {
                string sept = string.Empty;
                sept = this.test.Contains("==") ? "==" : string.Empty;
                sept = string.IsNullOrEmpty(sept) ?(this.test.Contains(">") ? ">" : string.Empty):sept;
                sept = string.IsNullOrEmpty(sept) ? (this.test.Contains("<") ? "<" : string.Empty) : sept;
                sept = string.IsNullOrEmpty(sept) ?(this.test.Contains(">=") ? ">=" : string.Empty):sept;
                sept = string.IsNullOrEmpty(sept) ?(this.test.Contains("<=") ? "<=" : string.Empty):sept;
                sept = string.IsNullOrEmpty(sept) ? (this.test.Contains("!=") ? "!=" : string.Empty) : sept;
                return sept;
            }
    
            private bool NumericCondition(double value1, double value2, string sept)
            {
                bool returnFlag = false;
                switch (sept)
                {
                    case "==":
                        returnFlag = (value1 == value2);
                        break;
                    case ">":
                        returnFlag = (value1 > value2);
                        break;
                    case "<":
                        returnFlag = (value1 < value2);
                        break;
                    case ">=":
                        returnFlag = (value1 >= value2);
                        break;
                    case "<=":
                        returnFlag = (value1 <= value2);
                        break;
                    case "!=":
                        returnFlag = (value1 != value2);
                        break;
                }
                return returnFlag;
            }
    
            private bool AlphaNumericCondition(string value1, string value2, string sept)
            {
                bool returnFlag = false;
                switch (sept)
                {
                    case "==":
                        returnFlag = (value1.CompareTo(value2) == 0);
                        break;
                    case "!=":
                        returnFlag = (!value1.Equals(value2));
                        break;
                    case ">":
                        returnFlag = (value1.CompareTo(value2) > 0);
                        break;
                    case "<":
                        returnFlag = (value1.CompareTo(value2) < 0);
                        break;
                }
                return returnFlag;
            }
    
            protected override void Render(HtmlTextWriter writer)
            {
                if ((HttpContext.Current != null) && (HttpContext.Current.Application != null))
                {
                    Control parent = this.Parent;
                    if (!(parent is Choose))
                    {
                        throw new InvalidOperationException("WhenCond control must have a Tridion Web UI Choose server control as parent!!!");
                    }
                    Choose choose = (Choose)parent;
                    if (!choose.AlreadyMatchedCondition() && this.Condition())
                    {
                        choose.MatchedCondition();
                        this.RenderChildren(writer);
                    }
                }
            }
    
            [Category("Appearance"), DefaultValue(""), Bindable(true)]
            public string Test
            {
                get
                {
                    return this.test;
                }
                set
                {
                    this.test = value;
                }
            }
        }
    }
    

    在aspx页面中的实现

    <%@ Register assembly="Tridion.Custom.Web.UI" namespace="Tridion.ContentDelivery.UGC.Web.UI" tagprefix="cc1" %>
    
    
    <ugc:Choose runat="server">
      <cc1:WhenCond test="ugcItemStats.numberOfComments > CommentCount" runat="server">
             HTML1
      </cc1:WhenCond>
      <ugc:Otherwise runat="server">
             HTML2
      </ugc:Otherwise>
    </ugc:Choose>
    

    如果您遇到任何问题,请告诉我。

    【讨论】:

    • 它工作正常,你已经创建了自己的 标签。它的帮助很多,并且易于在 tridion 中使用此代码。非常感谢您的代码。
    【解决方案2】:

    据我所知,When 条件仅支持 ==equals 两个条件。因此,您可能必须使用这些来解决您的测试条件(两者相同)。

    有人可以验证或确认上述是否属实吗?

    【讨论】:

    • 在 Tridion UGC 中,它不接受 "==" 关键字,它只适用于等于。我需要其他条件运算符符号。
    • == 为我工作。我以前在 j2ee 应用程序中使用过它(对于 .net 也应该无关紧要)。你在尝试这个ugcItemStats.numberOfComments==CommentCount 吗?
    • 不,它不适用于 Tridion UGC 条件语句,我尝试了很多次。
    【解决方案3】:

    您是否尝试过使用 >?这通常可以解决类似的事情,例如XPath。

    【讨论】:

      【解决方案4】:

      抱歉,When 标签目前只支持“==”或“equals”。

      【讨论】:

      • 我试过很多次,它只支持“等于”。告诉我如何在你的代码中使用 ==?
      • 这没什么,真的。 “变量 == 值”是语法。但是使用“==”或“equals”真的没关系,都是一样的。因此,如果由于某种原因无法使其正常工作,请改用“等于”。如果您遇到问题,请将您的日志级别设置为 DEBUG,它会告诉您发生了什么...
      • 如何在 Tridion UGC 中设置 DEBUG 级别?你能建议一下吗?提前致谢。
      • 您在 logback.xml 中执行此操作。请参阅在线文档中的以下页面:sdllivecontent.sdl.com/LiveContent/content/en-US/…
      • logback 应用于内容交付时间。但是 UGC:Choose & ugc:When tag and condition work on the page load time.
      猜你喜欢
      • 2012-08-15
      • 2017-02-03
      • 2018-12-17
      • 2018-10-19
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 2010-12-25
      相关资源
      最近更新 更多