标签:href mat oval lsp 结果 new 极速 padding prope
[ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator
原理同之前设计在Custom Control里面一样,请参考:TextBox动态加入RequiredFieldValidator与CustomValidator
只是这边是运用在User Control里面,因为User Control组合的弹性更大,
顺手写个范例给开发的team member作个参考,也希望各位前辈不吝赐教。
这边的User Control仍为之前范例上,有两个TextBox,一个为ID,一个为Name。
需求:
接着让我们看下去…
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);
}
}
最后来看看结果:
这个范例可以练习到
最后成功的把Required,封装在User Control里面,让使用的人只需要设定一个属性就可以搞定。
把相关文件Sample Code附上来,可以玩玩看测试的页面,有问题欢迎反应给我,谢谢。
Sample Code:UserControlRequired.zip
[注1]:2009/12/24,属性若使用ViewState,请自行判断是否为null,若是,则给默认值(例如false或string.empty),
否则可能出现Null exception。已将判断补上文章上sample code
或许您会对下列培训课程感兴趣:
想收到第一手公开培训课程资讯,或想询问企业内训、顾问、教练、咨询服务的,请洽 Facebook 粉丝专页:91敏捷开发之路。 |
原文:大专栏 [ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator
[ASP.NET]UserControl透过属性,动态加入RequiredFieldValidator
标签:href mat oval lsp 结果 new 极速 padding prope
原文地址:https://www.cnblogs.com/petewell/p/11526732.html