[ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator
Posted petewell
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator相关的知识,希望对你有一定的参考价值。
[ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator
前言
原理同之前设计在Custom Control里面一样,请参考:TextBox动态加入RequiredFieldValidator与CustomValidator
只是这边是运用在User Control里面,因为User Control组合的弹性更大,
顺手写个范例给开发的team member作个参考,也希望各位前辈不吝赐教。
介绍
这边的User Control仍为之前范例上,有两个TextBox,一个为ID,一个为Name。
需求:
- 要有property可以存取CodeID与CodeName的值
- 要有property可以控制CodeID与CodeName是否为必要输入项
- 要能与外界ValidationGroup一起运行
- 错误消息要能读取Resource档,且与外界交互(例如:XXX 代码 不可空白,XXX要能给外面设定)
- PostBack与多个User Control要能正常运行
接着让我们看下去…
Play it
aspx上,要有两个TextBox,分别为txtID与txtName。
针对第一个需求与第二个需求,我们开四个属性出来,
特别要注意的是,Required的属性要使用ViewState记,不然PostBack会掉。
/// Gets or sets the code ID.
///
/// The code ID.
public string CodeID
get return this.txtID.Text;
set this.txtID.Text = value;
///
/// Gets or sets a value indicating whether [code ID required].
///
/// true if [code ID required]; otherwise, false .
public bool CodeIDRequired
get
return (bool)(this.ViewState["CodeIDRequired"]??false);
set this.ViewState["CodeIDRequired"] = value;
///
/// Gets or sets the name of the code.
///
/// The name of the code.
public string CodeName
get return this.txtName.Text;
set this.txtName.Text = value;
///
/// Gets or sets a value indicating whether [code name required].
///
/// true if [code name required]; otherwise, false .
public bool CodeNameRequired
get return (bool)(this.ViewState["CodeNameRequired"]??false);
set this.ViewState["CodeNameRequired"] = value;
根据第三个需求与第四个需求,我们要开ValidationGroup的属性与一个供外界设定错误消息的属性。
/// Gets or sets the mapping label text.
///
/// The mapping label.
public string MappingLabel get; set;
///
/// Gets or sets the validation group.
///
/// The validation group.
public string ValidationGroup
get return this.txtID.ValidationGroup;
set
this.txtID.ValidationGroup = value;
this.txtName.ValidationGroup = value;
要读取Resource档的消息代码,我这边写在BasePage,并且声明成static。
public BasePage()
//
// TODO: 在此加入建构函数的程序
//
///
/// Getmessages the specified Message id.
///
/// The Message id.
///
public static string GetMessage(string MsgId)
return Resources.Message.ResourceManager.GetString(MsgId);
Message则是长这样:
最后,
我们要在User Control的Page_PreRender事件,判断Required属性,是否为True,再决定是否要动态加入RequiredFieldValidator。
if (this.CodeIDRequired)
RequiredFieldValidator codeIDRequiredValidator = new RequiredFieldValidator();
codeIDRequiredValidator.Display = ValidatorDisplay.None;
codeIDRequiredValidator.ValidationGroup = this.ValidationGroup;
codeIDRequiredValidator.ControlToValidate = this.txtID.ID;
//这边是结合Resource的Message档,搭配string.Format,可以结合更多的应用
//在这里,10400代表‘字段不可空白’
codeIDRequiredValidator.ErrorMessage = string.Format(BasePage.GetMessage("10400"), MappingLabel + "代码");
this.Controls.Add(codeIDRequiredValidator);
if (this.CodeNameRequired)
RequiredFieldValidator codeNameRequiredValidator = new RequiredFieldValidator();
codeNameRequiredValidator.Display = ValidatorDisplay.None;
codeNameRequiredValidator.ValidationGroup = this.ValidationGroup;
codeNameRequiredValidator.ControlToValidate = this.txtName.ID;
//这边是结合Resource的Message档,搭配string.Format,可以结合更多的应用
//在这里,10400代表‘字段不可空白’
codeNameRequiredValidator.ErrorMessage = string.Format(BasePage.GetMessage("10400"), MappingLabel+"姓名");
this.Controls.Add(codeNameRequiredValidator);
最后来看看结果:
结论
这个范例可以练习到
- User Control属性的开立
- ViewState的应用
- 动态加入验证控件
- 读取消息档方法的共用
- 让User Control的验证消息可以读消息档,也可以跟外界交互
最后成功的把Required,封装在User Control里面,让使用的人只需要设定一个属性就可以搞定。
把相关文件Sample Code附上来,可以玩玩看测试的页面,有问题欢迎反应给我,谢谢。
Sample Code:UserControlRequired.zip
[注1]:2009/12/24,属性若使用ViewState,请自行判断是否为null,若是,则给默认值(例如false或string.empty),
否则可能出现Null exception。已将判断补上文章上sample code
或许您会对下列培训课程感兴趣:
- 2019/7/27(六)~2019/7/28(日):演化式设计:测试驱动开发与持续重构 第六梯次(中国台北)
- 2019/8/16(五)~2019/8/18(日):【C#进阶设计-从重构学会高易用性与高弹性API设计】第二梯次(中国台北)
- 2019/9/21(六)~2019/9/22(日):Clean Coder:DI 与 AOP 进阶实战 第二梯次(中国台北)
- 2019/10/19(六):【针对遗留代码加入单元测试的艺术】第七梯次(中国台北)
- 2019/10/20(日):【极速开发】第八梯次(中国台北)
想收到第一手公开培训课程资讯,或想询问企业内训、顾问、教练、咨询服务的,请洽 Facebook 粉丝专页:91敏捷开发之路。 |
原文:大专栏 [ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator
以上是关于[ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator的主要内容,如果未能解决你的问题,请参考以下文章
将 UserControl 属性设置为不显示在 VS 属性窗口中
在 asp.net 中,如何从 usercontrol 获取自定义 webcontrol 的引用?
如何在 UserControl (.ascx) 中调用 ASP.NET WebMethod
ASP.NET UserControl 和 DefaultEvent