[翻译]Chameleon介绍(5) : 条件控件

本文介绍了Chameleon框架中用于定义控件显示条件的各种条件控件。这些控件包括组合条件、属性值比较、属性比较、控件可见性、用户角色、区域权限、当前站点URL及自定义条件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[原文] http://getben.com/archive/2007/01/15/introduction-to-chameleon-condition-controls.aspx

这篇文章属于我的文章系列 Chameleon介绍...

控件开发者使用条件控件定义查询条件,给其它控件使用.

条件控件通常用于其它Chameleon控件(如 单值控件, 列表控件,以及 表单控件),定义它们显示的条件.显示条件通过内置属性"DisplayConditions"定义.

Chameleon包含一系列默认的条件控件,同时提供了实现自定义条件的机制(继承ConditionBase).已有的条件控件包括:

  1. Conditions(<CSControl:Conditions />)

    Conditons控件用于组合一个或更多其它条件控件的结果.例如:
    < CSControl:Conditions  Operator ="And"  runat ="server" >
    < CSControl:PostPropertyValueComparison  runat ="server"  ComparisonProperty ="HasVideo"
     Operator
    ="IsSetOrTrue"   />
    < CSControl:PostPropertyValueComparison  runat ="server"  ComparisonProperty ="IsApproved"
     Operator ="IsSetOrTrue"   />
    </ CSControl:Conditions >
    只有在当前贴子包含视频并且已被审核通过时才会计算为真.

    Conditions控件只提供了一个属性,"Operator",用于定义如何计算包含的条件控件.支持的值有:Or, And, ExclusiveOr, 以及Not.

    Chameleon控件的内置属性"DisplayConditions",是一个Conditons控件,用于支持只在某些条件下输出.

    注意Conditions控件可以包含其它Conditons控件.当显示条件非常复杂时,嵌入Conditions控件很有用.

  2. 属性和值比较控件

    对Community Server API里的每个数据类型,都有一个对其进行属性/值比较的条件控件.属性/值比较控件提供了一种方式,来实现把对象的值或属性与一个预定义的值进行比较.例如:
    < CSControl:PostPropertyValueComparison  runat ="server"  ComparisonProperty ="PostDate"
     ComparisonValue
    ="6/8/2006"  Operator ="LessThan"   />
    在当前贴子的发表日期早于6/8/2006时为真.所有的属性/值比较控件提供了下列配置属性:
    1. ComparisonProperty
      ComparisonProperty指定了用于比较的对象的属性名.

    2. ComparisonValue
      ComparisonValue指定一个固定的值,用于与ComparisonProperty进行比较.如果与ComparisonProperty是个DateTime值,ComparisonValue可以设为"today"或"now"来指定当前的日期或时间.

    3. ComparisonValueAdjustment
      ComparisonValueAdjustment 定义了用于调整ComparisonValue的量.当为ComparisonValue指定"today"或"now"时特别有用.在这种情况下,在处理条件前,ComparisonValueAdjustment与ComparisonValueAdjustmentUnits共同指定的一个时间长度会加到"today"或"now"上.
      只有在ComparisonValue的类型是DateTime, int, 或double时,才会使用ComparisonValueAdjustment.

    4. ComparisonValueAdjustmentUnits(Minute, Hour, Day, Month, Year, Default)
      当指定了ComparisonValueAdjustment时,ComparisonValueAdjustmentUnits用于指定调整值的单位.例如,你可以使用下面的代码来检查一个指定的贴子是否是在最近24小时内发表的:
      当ComparisonProperty的类型是int或double,并且指定了ComparisonValueAdjustment时,ComparisonValueAdjustUnit会被忽略.DateTime类型调整值的默认单位是Day.

    5. Operator(Contains, EndsWith, EqualTo, GreaterThan, GreaterThanOrEqualTo, LessThan, LessThanOrEqualTo, StartsWith, IsSetOrTrue)
      Operator指定如何比较ComparisonProperty的值与ComparisonValue.
      如果Operator设为"IsSetOrTrue",ComparisonValue会被忽略.

  3. 属性比较条件
    每个Community Server API数据类型对应了一个属性比较控件,和属性/值控件一样.属性比较控件提供了一种方式,来比较同一对象的两个属性.例如:
    < CSControl:PostPropertyComparison  runat ="server"  ComparisonProperty1 ="Views"
     ComparisonProperty2
    ="Replies"  Operator ="EqualTo"   />
    在当前贴子的点击数与回复数相等时为真.所有的属性比较条件提供了下列配置属性:

    1. ComparisonProperty1
      ComparisonProperty1定义了当前对象的一个属性名称,用于比较.

    2. ComparisonProperty2
      ComparisonProperty2定义了当前对象的一个属性名称,用于与ComparisonProperty1的值进行比较.

    3. Operator(Contains, EndsWith, EqualTo, GreaterThan, GreaterThanOrEqualTo, LessThan, LessThanOrEqualTo, StartsWith, IsSetOrTrue)
      Operator指定了如何比较ComparisonProperty1的值和ComparisonProperty2的值.
      当Operator设为"IsSetOrTrue"时,ComparisonProperty2的值会被忽略.

  4. ControlVisibilityCondition (<CSControl:ControlVisibilityCondition />)
    ControlVisibilityCondition使用前页面的另一个控件的可视性(visibility)来构造条件.ControlVisibilityCondition定义了下面的配置属性:

    1. ControlId
      当前页面用于比较其可视性的控件的ID.

    2. ControlVisibilityEquals
      ControlVisibilityEquals是个布尔值,用于指定使整个条件为真的可视性的值.
      例如,如果ControlVisibilityEquals设置为"true",ControlId指定的控件必须可见(译注:即Visible=true),才能使ControlVisibilityCondition为真.

  5. UserInRoleCondition (<CSControl:UserInRoleCondition />)
    UserInRoleCondition提供了一种方式来根据用户的角色定义条件.这个控件提供了下列配置属性:

    1. Role
      Role指定了一个角色名称,用户只有属性这个角色时,条件才会计算为真.

    2. UseAccessingUser
      如果为true,会使用请求页面的用户来检查成员角色.如果为假,会使用根据UserInRoleCondition控件的上下文得到的当前用户.

  6. SectionPermissionCondition (<CSControl:SectionPermissionCondition />)

    SectionPermissionCondition提供了一种根据用户在当前节的权限构造条件的方式。这个控件只提供了一个配置属性“Permission”,指定用户访问当前页面所需要的权限名称。如果用户在当前节(或节及帖子)里拥有指定的权限,SectionPermissionCondition值为真,否则为假。

  7. CurrentSiteUrlCondition (<CSControl:CurrentSiteUrlCondition />)
    CurrentSiteUrlCondition提供了根据当前页面URL及SiteUrls.config文件构造条件的方式。这个控件只提供了一个配置属性“SiteUrlName”,指定URL在SiteUrls.config里的名称。如果当前页面的URL是SiteUrlName定义的Url,CurrentSiteUrlCondition值为真。

    当SiteUrl.config里有多个URL通过同一物理Aspx页面输出,但不同的URL的输出间应该有轻微的不同时,这个控件非常有用。

  8. CustomCondition (<CSControl:CustomCondition />)
    CustomCondition添加了对基于代码的条件的支持。它仅提供了一个属性“CustomResult”,可以设置为自定义代码的结果。例如:
    < CSControl:CustomCondition  runat ="server"  CustomResult ='<%#  DateTime.Now.Hour  ==  12 % > ' />
    在服务器时间在中午12点到1点之间时值为真。

界面开发者可以使用这些控件在他们的界面里实现大范围的条件输出。例如:
< CSBlog:WeblogPostData  Text ="{0} comment(s)"  Property ="Replies"  LinkTo ="PostComments"  runat ="server" >
   
< DisplayConditions >
      
< CSBlog:WeblogPostPropertyValueComparison  runat ="server"  ComparisonProperty ="Replies"
 ComparisonValue ="0"  Operator ="GreaterThan"   />
   
</ DisplayConditions >
</ CSBlog:WeblogPostData >
< CSBlog:WeblogPostData  Text ="no comments"  LinkTo ="PostComments"  runat ="server" >
   
< DisplayConditions >
      
< CSBlog:WeblogPostPropertyValueComparison  runat ="server"  ComparisonProperty ="Replies"
 ComparisonValue
="0"  Operator ="LessThanOrEqualTo"   />
   
</ DisplayConditions >
</ CSBlog:WeblogPostData >
要么输出当前博客文章的评论数(如果大于0),要么输出“no comments"(如果尚无任何评论)。

如果你有关于Chameleon表单控件的问题(或任何有关Chameleon的问题),请通过我的 联系表单或添加评论告诉我。我会在 这一系列的最后一篇文章里回答它们。

这个系列的下一篇文章里,我会讨论 动作控件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值