自定義的ValidationSummary控制元件

iDotNetSpace發表於2009-01-16

一. 目的:

     實現一個帶linked的ValidationSummary控制元件

二. 實現:

     


<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt/// 
    
/// 驗證控制元件
    
/// 
    [ToolboxData("{0}:ValidationSummaryControl>")]
    
public class ValidationSummaryControl : ValidationSummary
    {
        
#region 變數
        
/// 
        
/// 設定控制元件焦點的指令碼
        
/// 
        private static readonly string strJs = @"function setFocus(control)
                                           {
                                               var controlToValidate = document.getElementById(control);
                                               controlToValidate.focus();
                                           }  
";
        
#endregion       

        
#region 事件

        
protected override void OnPreRender(EventArgs e)
        {
            
base.OnPreRender(e);

            
//註冊指令碼
            RegisterScript();           
        }

        
protected override void Render(HtmlTextWriter writer)
        {
            MakeClickableErrorMessage();

            
base.Render(writer);
        }

        
#endregion  
        
        
#region 私有方法

        
/// 
        
/// 讓錯誤資訊能夠定位相應控制元件
        
/// 
        private void MakeClickableErrorMessage()
        {
            
foreach (BaseValidator validator in this.Page.Validators)
            {
                
if (validator.ControlToValidate == string.Empty || validator.ErrorMessage == string.Empty)
                {
                    
continue;
                }

                
//獲取需驗證的控制元件
                Control controlToValidate = validator.Parent.FindControl(validator.ControlToValidate);
                
if (null != controlToValidate)
                {
                    
string clientID = controlToValidate.ClientID;
                    
string script = string.Format(""javascript.:setFocus('{0}');\">{1}", clientID, validator.ErrorMessage);
                    
//給錯誤資訊新增linked
                    validator.ErrorMessage = script;
                    validator.Display 
= ValidatorDisplay.None;
                }
            }
        }

        
/// 
        
/// 註冊指令碼
        
/// 
        private void RegisterScript()
        {
            
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "__ValidationSummaryControl"))
            {
                Page.ClientScript.RegisterClientScriptBlock(
this.GetType(), "__ValidationSummaryControl", strJs, true);
            }
        }

        
#endregion
    }

 

一個帶有linked的ValidationSummary控制元件就寫好了。

三. 說明:

     其中MakeClickableErrorMessage方法是可以放在OnPreRender方法中的,但是與我後來做得一個帶有驗證控制元件的TextBox有衝突,所以把MakeClickableErrorMessage方法寫到了Render方法中去了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-539807/,如需轉載,請註明出處,否則將追究法律責任。

相關文章