[翻译]Chameleon介绍(6) : 动作控件
[原文]: http://getben.com/archive/2007/01/16/introduction-to-chameleon-action-controls.aspx
这篇文章属于我的文章系列Chameleon介绍...
动作控件定义了单个功能或行为,由其它Chameleon控件在配置的事件发生时调用。
动作控件通常使用于当Chameleon表单控件处理完成了一个事件,比如博客联系表单提交成功。例如:
<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>
使用<CSControl:SetVisibilityAction />动作控件来声明,当<CSBlog:ContactForm />提交成功后,以"SuccessMessage"为ID的控件的Visibility属性应该设为真。
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>
Community Server 2007里定义了很多动作控件,也可以轻松地定义新的动作控件(所有动作控件继承于ActionBase)。已有的动作控件包括:
- ExecuteScriptAction (<CSControl:ExecuteScriptAction />)
ExecuteScriptAction会运行由Script属性指定的JavaScript脚本。
- GoToCurrentContentAction (<CSControl:GoToCurrentContentAction />)
如果在当前上下文中存在内容对象的话,GoToCurrentContentAction会导航到当前内容对象。
- GoToCurrentPostAction (<CSControl:GoToCurrentPostAction />)
如果当前上下文中存在贴子的话,GoToCurrentPostAction会导航到当前的贴子(Post)。
- GoToModifiedUrlAction (<CSControl:GoToModifiedUrlAction />)
GoToModifiedUrlAction会应用指定的查询字符串(QueryStringModification属性指定)及目标更改(TargetLocaitonModification属性指定)到当前URL,并导航到更改后的结果URL。
- GoToReferralUrlAction (<CSControl:GoToReferralUrlAction />)
如果查询字符串里声明了引用URL的话,GoToReferralUrlAction会导航到该URL。
- GoToSiteUrlAction (<CSControl:GoToSiteUrlAction />)
GoToSiteUrlAction会导航到UrlName指定的SiteUrls.config文件里定义的Url。
- SetVisibilityAction (<CSControl:SetVisibilityAction />)
SetVisibilityAction会设置ControlIdsToShow属性指定的控件为可见(Visible=ture)并且设置ControlIdsToHide属性指定的控件为不可见(Visible=false)。两个属性里的列表都用逗号分隔。
- CustomAction (<CSControl:CustomAction />)
CustomAction通过提供CustomEvent事件,添加了基于代码的动作。这个事件可以用来实现内联代码。CustomEvent为事件处理器传入了执行此事件的父控件的引用,以及父控件的参数(与具体的控件有关)。例如:
<script runat="server" language="C#">会执行定义在页面上的MyCustomEventHandler方法里的自定义代码。
protected void MyCustomEventHandler(System.Web.UI.Control sender, object parameter)
{
// custom code here
}
</script>
<CSControl:CustomAction runat="server" CustomEvent="MyCustomEventHandler" />
- Actions (<CSControl:Actions />)
Actions用于执行一系列的子动作。上面示例中<CSBlog:ContactForm />的内置属性"SuccessActions"就是一个Actions控件。注意,Actions里可以使用多于一个运作控件。动作以它们定义的顺序执行,因此,下面的例子:
<SuccessActions>会首先试图导航到查询字符串里指定的引用URL。如果没有定义引用URL,"SuccessMessage"控件会显示。
<CSControl:GoToReferralUrlAction runat="server" />
<CSControl:SetVisibilityAction runat="server" ControlIdsToShow="SuccessMessage" />
</SuccessActions>
动作控件提供了一种简单的机制允许界面开发者自定义表单的行为。界面开发者现在可以根据他们界面的需要而实现自定义的导航和通知行为。
如果你有关于Chameleon表单控件的问题(或任何有关Chameleon的问题),请通过我的联系表单或添加评论告诉我。我会在这一系列的最后一篇文章里回答它们。
这个系列的下一篇文章里,我会讨论辅助控件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~