切换RequiredFieldValidator和RegularExpressionValidator提示信息的控件

本文介绍了一种自定义的ASP.NET控件InteractiveMessager,该控件可以在文本框旁边显示提示信息,并根据验证结果改变样式及内容。适用于提高用户体验,使用户能够实时了解输入的有效性。
来源:PowerEasy
添加后直接引用就可以了
附上控件代码
ContractedBlock.gifExpandedBlockStart.gifInteractiveMessager
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Design;
using System.ComponentModel;
using System.Drawing;

namespace UserCenter
{
    
public class InteractiveMessager : Literal
    {
        
// Methods
        protected override void OnPreRender(EventArgs e)
        {
            
base.OnPreRender(e);
            WebControl control 
= this.Parent.FindControl(this.ControlToMessage) as WebControl;
            
if (control != null)
            {
                control.Attributes.Add(
"onfocus""onControlFocus(" + control.ClientID + "," + this.ClientID + ");");
                control.Attributes.Add(
"onblur""onControlBlur(" + control.ClientID + "," + this.ClientID + ");");
                
//control.Style.Add("float", "left");
                
//control.Style.Add("line-height", "100%");
            }
            
this.Page.ClientScript.RegisterExpandoAttribute(this.ControlToMessage, "MessageId"this.ClientID);
            
this.Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "ValidatorOkMessage"this.ValidatorOkMessage);
            
this.Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "Message"base.Text);
            
this.Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "IsValidEmpty"this.IsValidEmpty.ToString());
            
string script = "<script type=\"text/javascript\">\r\nvar currentClassName = \"\";\r\nfunction onControlFocus(obj,messager)\r\n{\r\n    currentClassName = obj.className;\r\n    obj.className = 'input_onFocus';\r\n    messager.className = 'd_on';\r\n    messager.innerHTML = messager.Message;\r\n}\r\n    \r\nfunction onControlBlur(obj,messager)\r\n{\r\n    obj.className = currentClassName;\r\n    messager.className ='';\r\n    for (i = 0; i < Page_Validators.length; i++) \r\n    {\r\n        val = Page_Validators[i];\r\n        if(val.controltovalidate == obj.id)\r\n        {\r\n            val.isvalid = true;\r\n            if ((typeof(val.enabled) == \"undefined\" || val.enabled != false)) \r\n            {\r\n                if (typeof(val.evaluationfunction) == \"function\")\r\n                {\r\n                    val.isvalid = val.evaluationfunction(val);\r\n                }\r\n             }\r\n                \r\n            if(messager.IsValidEmpty==\"True\")\r\n            {\r\n                if(val.isvalid == false)\r\n                {\r\n                    messager.innerHTML = val.errormessage;\r\n                    messager.className = 'd_err';\r\n                    break;\r\n                }\r\n                else\r\n                {\r\n                    messager.innerHTML = messager.ValidatorOkMessage;\r\n                    messager.className = 'd_ok';\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if(obj.value!='')\r\n                {\r\n                    if(val.isvalid == false)\r\n                    {\r\n                        messager.innerHTML = val.errormessage;\r\n                        messager.className = 'd_err';\r\n                        break;\r\n                    }\r\n                    else\r\n                    {\r\n                        messager.innerHTML = messager.ValidatorOkMessage;\r\n                        messager.className = 'd_ok';\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                     obj.className ='';\r\n                     messager.className = '';\r\n                }\r\n            }\r\n\r\n            ValidatorUpdateDisplay(val);\r\n        }\r\n    }\r\n}\r\n</script>";
            
if (!this.Page.ClientScript.IsStartupScriptRegistered(this.Page.GetType(), "MessageJS"))
            {
                
this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "MessageJS", script);
            }
        }
        
public string MessageFunction()
        {
            
string ret = string.Empty;
            WebControl control 
= this.Parent.FindControl(this.ControlToMessage) as WebControl;
            
if (control != null)
            {
                ret 
= "onControlBlur(" + control.ClientID + "," + this.ClientID + ");";
            }
            
return ret;
        }
        
protected override void Render(HtmlTextWriter writer)
        {
            writer.Write(
"<li class=\"msg\" id=\"");
            writer.Write(this.ClientID);
            writer.Write(
"\">");
            if (this.IsShowText)
            {
                writer.Write(
base.Text);
            }
            writer.Write(
"</li>");
        }

        
// Properties
        [DefaultValue("")]
        
public string ControlToMessage
        {
            
get
            {
                
object obj2 = this.ViewState["ControlToMessage"];
                
if (obj2 != null)
                {
                    
return (string)obj2;
                }
                
return "";
            }
            
set
            {
                
this.ViewState["ControlToMessage"= value;
            }
        }

        [DefaultValue(
false)]
        
public bool IsShowText
        {
            
get
            {
                
object obj2 = this.ViewState["IsShowText"];
                
return ((obj2 != null&& ((bool)obj2));
            }
            
set
            {
                
this.ViewState["IsShowText"= value;
            }
        }

        [DefaultValue(
true)]
        
public bool IsValidEmpty
        {
            
get
            {
                
object obj2 = this.ViewState["IsValidEmpty"];
                
if (obj2 != null)
                {
                    
return (bool)obj2;
                }
                
return true;
            }
            
set
            {
                
this.ViewState["IsValidEmpty"= value;
            }
        }

        [DefaultValue(
"")]
        
public string ValidatorOkMessage
        {
            
get
            {
                
object obj2 = this.ViewState["ValidatorOkMessage"];
                
if (obj2 != null)
                {
                    
return (string)obj2;
                }
                
return "";
            }
            
set
            {
                
this.ViewState["ValidatorOkMessage"= value;
            }
        }
    }


}

附上页面代码

<asp:TextBox ID="txtAnswer" runat="server" style="width:180px" ></asp:TextBox>
                     
<span style ="color :Red">*</span>
                     
<asp:RequiredFieldValidator 
                        ControlToValidate 
="txtAnswer" 
                        ID
="RequiredFieldValidator4" 
                        runat
="server" 
                        ErrorMessage
="(此项必填)"
                        Display
="None">
                    
</asp:RequiredFieldValidator>
                    
<asp:RegularExpressionValidator 
                            ControlToValidate
="txtAnswer"  
                            ID
="RegularExpressionValidator8" 
                            runat
="server" 
                            ErrorMessage
="您的答案少于四个字符或者多于五十个字符" 
                             ValidationExpression
="^.{4,50}$"
                             Display
="None">
                    
</asp:RegularExpressionValidator>
                    
</li>
                     
<uc:InteractiveMessager ID ="interactiveMessager5" 
                        ControlToMessage 
="txtAnswer" 
                        runat 
="server" 
                        Text
="用于取回密码。请尽量设得复杂一些,以防被人用找回密码功能窃取您的帐号。长度在四到五十个字符之间。"
                         ValidatorOkMessage 
="答案已经输入"  >
                     
</uc:InteractiveMessager>

转载于:https://www.cnblogs.com/jinzhao/archive/2009/09/01/1558111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值