[翻译]Chameleon介绍(4) : 表单控件

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

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

Chameleon表单控件实现了Community Server的表单功能,例如:创建论坛贴子,编辑用户资料,或注册用户账号。

Chameleon里的表单控件定义了实现表单所需的最少功能——它们像“胶水”一样,把一系列表单元素粘合在一起,执行一个操作。操作完成后,很多表单还提供了一种方式,让界面开发人员决定下一步要做什么。例如,博客控件ContactForm:

<CSBlog:ContactForm runat="server" SubjectTextBoxId="Subject" NameTextBoxId="Name"
 EmailTextBoxId="Email" MessageTextBoxId="Body" SubmitButtonId="Submit">
   
<SuccessActions>
      
<CSControl:SetVisibilityAction runat="server" ControlIdsToShow="SuccessMessage" />
   
</SuccessActions>
   
<FormTemplate>

      
<div><CSControl:FormLabel LabelForId="Name" runat="server"
 ResourceName="Weblog_ContactForm_Name" /></div>
      
<div><asp:TextBox id="Name" runat="server" /></div>

      
<div><CSControl:FormLabel LabelForId="Email" runat="server"
 ResourceName="Weblog_ContactForm_Email" /></div>
      
<div><asp:TextBox id="Email" runat="server" /></div>

      
<div><CSControl:FormLabel LabelForId="Subject" runat="server"
 ResourceName="Weblog_ContactForm_Subject" /></div>
      
<div><asp:TextBox id="Subject" runat="server" /></div>        

      
<div><CSControl:FormLabel LabelForId="Body" runat="server"
 ResourceName="Weblog_ContactForm_Body" /></div>
      
<div><asp:TextBox id="Body" runat="server" TextMode="MultiLine" /></div>

      
<div>
      
<asp:Button id="Submit" runat="server" Text="Send" />
      
<CSControl:ResourceControl runat="Server" id="SuccessMessage"
 ResourceName="Weblog_ContactForm_Sent" Visible="false" />
      
</div>

   
</FormTemplate>
</CSBlog:ContactForm>

定义了一个表单,允许浏览网站的人联系博客的所有者。ContactForm的属性指定了FormTemplate里的控件,它使用这些控件来实现表单必需的输入——主题,姓名,邮件,消息,以及提交。ContactForm自身提供了“连线”功能,使得这些表单元素执行联系博客所有者的任务。当表单成功处理后,内置属性SuccessActions定义了要执行的动作(动作控件将会在本系列稍后的一篇文章里讨论)。

Chameleon表单控件支持与单值控件相同的属性(ControlIdsToHideWhenNotVisible, ContainerId, CssClass, Tag, DisplayConditions, LeaderTemplate, TrailerTemplate, DataSource, and Attributes),同时还支持以下属性(从WrappedFormBase继承而来):

  1. ValidationGroup
    ValidationGroup是验证组的名字,会在验证表单的内容时使用。
  2. FormTemplate
    FormTemplate是一个内置属性,包含了作为表单内容输出的标签和控件。一般情况下,表单的子控件包含在FormTemplate里,但这并不是必须的。
  3. 子控件的ID
    每个表单支持指定用途的一系列子控件。对于支持的每个子控件,都暴露了一个属性,以期望的值/用途和控件的类型命名。

    并非所有子控件属性都必须被设置,然而,如果需要的控件ID未被指定(或不存在),表单控件将会抛出一个异常,解释哪些控件ID是必须的。
  4. 完成后的动作
    取决于表单的功能,与动作相关的内置属性会被暴露,以允许界面开发者定义一个或一些动作,在表单完成了特定功能后执行。

    大部分表单控件暴露了“SuccessActions”,在表单成功完成后(例如,当ContactForm成功地提交后)执行。如果一个表单有不止一个完成动作,它会为每种类型的完成动作,暴露一个“Actions”内置属性。类似地,如果表单没有完成动作,或它的完成动作是预定义的(例如,SearchForm总是把用户转到搜索结果页面),它不会支持任何界面开发者定义的“Actions”。
  5. SubFormIDs
    少数几个Chameleon表单控件支持子表单。Chameleon子表单控件(继承于WrappedSubFormBase)可以参与表单生命周期,并且扩展现有表单的功能。例如,CreateEditForumPostForm支持子表单,在默认的界面中,它使用了TagsSubForm,AttachmentSubForm,VideoSubForm,PollSubForm,以及InkSubForm,给基本的论坛发贴表单添加标签,附件,视频,投票,以及Ink(各自添加一种功能)等功能。

    子表单使得表单更加简单——CreateEditForumPostForm实现了发表论坛贴子所需要的基本功能——同时允许在界面复用的基础上,添加新的,自定义的功能。例如,界面开发者可以使用投票子表单或视频子表单的自定义实现,而不需要编程重写整个CreateEditForumPostForm控件。类似地,界面开发者可以给表单添加一个新的子表单,比如添加一个允许用户选择贴子背景纹理的子表单。

Chameleon表单控件在功能上类似Community Server 2.1及更早版本里的themed controls。它们附加到预定义的子控件上,并使用这些子控件执行特定的功能。然而,不像Community Server 2.1及更早版本,Chameleon表单控件暴露了它所支持的子控件的列表(通过子控件ID属性),允许界面开发人员定义控件ID,并且允许界面开发者自定义完成动作(通过动作控件)以及表单功能(通过子表单)。

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

这个系列的下一篇文章里,我会讨论条件控件

posted on 2007-05-05 03:01  deerchao  阅读(773)  评论(9编辑  收藏  举报