deerchao的blog

Be and aware who you are.

[翻译]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 阅读(211) 评论(10)  编辑 收藏 网摘 所属分类: Chameleon

评论

#1楼  2007-05-23 17:08 7798互动社区 [未注册用户]

如果在上面加AJAX呢?比如BLOG讨论那个地方   回复  引用    

#2楼  2007-05-23 20:37 deerchao      

应该可以加吧。

把发表评论那块的界面改成自定义的控件,应该可以实现Ajax的。   回复  引用  查看    

#3楼  2007-05-24 11:41 7798互动社区d [未注册用户]

不是啊,我是说如果要改他的动作控件来实现AJAX要如何?
我们知道cs的AJAX是AjaxManager.cs类中,要实现的方法一定要加[AjaxMethod(IncludeControlValuesWithCallBack=false)]这样的特性。
不知道直接这样来改行不行啊?   回复  引用    

#4楼  2007-05-25 01:32 deerchao      

只改动作控件应该是没法实现Ajax的——因为动作控件规定的动作是在页面处理完成之后才会执行的。而Ajax需要的是在发送请求时不刷新整个页面。
动作控件更适用于传统的页面刷新模式。要实现评论的Ajax,只能通过改发表评论的那个控件才行。   回复  引用  查看    

#5楼  2007-05-25 10:27 7798互动社区d [未注册用户]

嗯,我发现执行添加评论操作的是FORM控件,然后他再调用的动作控件的操作。这样的话要实现AJAX评论就要改FORM,LINKBUTTON,对应的动作控件,还有那个评论列表控件了,还真是麻烦。
cs2007是没有考虑AJAX应用的问题啊,这样还真不爽。   回复  引用    

#6楼  2007-05-25 16:10 7798互动社区d [未注册用户]

现在就差FORM没搞定了,因为事件是在它上面的,但是不知道他是如何绑到linkbutton上调用的,这样我没法加事件啊   回复  引用    

#7楼  2007-05-25 16:46 7798互动社区d [未注册用户]

哈哈,已经实现了   回复  引用    

#8楼  2007-05-29 11:05 7798互动社区d [未注册用户]

发现Chameleon的实现还是很烦锁,虽然比CS2.0好多了。
-_-!   回复  引用    

#9楼 [楼主] 2007-05-29 14:36 deerchao      

确实是很繁琐,但是目前也没找到能保证灵活性的更好的办法..   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-05-11 03:21 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接:


 
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

公告

给网络添加价值,就是让自己增加价值.

本博客所有内容,均为原创或对互联网已有资源的再加工,希望对你有用.在声明原作者的前提下,你可以任意使用,但本人对其正确性,使用的后果等不做任何担保,也不负任何责任.

正则表达式30分钟入门教程 v2.21 2007-8-3

I Want Spec#!

与我联系

搜索

 

常用链接

留言簿(66)

我管理的小组

我的标签

随笔档案(127)

文章分类(9)

文章档案(9)

新闻档案(9)

Links

积分与排名

最新评论

评论排行榜