使用asp.net ajax创建Extender控件

时间:2021-01-12 03:19:02
        很早就在看了,一直没写,现在记录下.以后可能用到比较多.


Extender控件本身并不对原有控件进行更改,而是进行扩展.可以说是前台固定的js文件加上一些后台生成的一些参数进行配合,来对前台显示的控件进行业务操作.废话不多说.看教程来学习下.

1.定义一个继承自 ExtenderControl类的控件扩展类

使用asp.net ajax创建Extender控件public   class  FocusExtender : ExtenderControl
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件
{
使用asp.net ajax创建Extender控件}

2.定义元属性

TargetControlType指定扩展类型

使用asp.net ajax创建Extender控件[TargetControlType( typeof (Control))]

3.重写GetScriptReferences和GetScriptDescriptors方法

(1)GetScriptReferences方法用于加载js文件集合

(2)GetScriptDescriptors方法用于添加控件行为描述,不好意思不知道怎么描述,反正就是为控件添加属性,事件等一些东西.

使用asp.net ajax创建Extender控件         protected   override  IEnumerable < ScriptReference >  GetScriptReferences()
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件        
{
使用asp.net ajax创建Extender控件            ScriptReference reference 
= new ScriptReference();
使用asp.net ajax创建Extender控件            reference.Path 
= ResolveClientUrl("FocusBehavior.js");
使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件            
return new ScriptReference[] { reference };
使用asp.net ajax创建Extender控件        }

使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件        
protected   override  IEnumerable < ScriptDescriptor >  GetScriptDescriptors(Control targetControl)
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件        
{
使用asp.net ajax创建Extender控件            ScriptBehaviorDescriptor descriptor 
= new ScriptBehaviorDescriptor("Samples.FocusBehavior", targetControl.ClientID);
使用asp.net ajax创建Extender控件            descriptor.AddProperty(
"highlightCssClass"this.HighlightCssClass);
使用asp.net ajax创建Extender控件            descriptor.AddProperty(
"nohighlightCssClass"this.NoHighlightCssClass);
使用asp.net ajax创建Extender控件           
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件            
return new ScriptDescriptor[] { descriptor };
使用asp.net ajax创建Extender控件        }


4.编写js文件

根据asp.net ajax框架的方法,将其写成类的形式

(1)添加事件,注意没有"on"

使用asp.net ajax创建Extender控件   // 初始化
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件
    initialize : function()  {
使用asp.net ajax创建Extender控件        Samples.FocusBehavior.callBaseMethod(
this'initialize');
使用asp.net ajax创建Extender控件        
使用asp.net ajax创建Extender控件        $addHandlers(
this.get_element(), 
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件                     
'focus' : this._onFocus,
使用asp.net ajax创建Extender控件                       
'blur' : this._onBlur }
,
使用asp.net ajax创建Extender控件                     
this);
使用asp.net ajax创建Extender控件        
使用asp.net ajax创建Extender控件        
this.get_element().className = this._nohighlightCssClass;
使用asp.net ajax创建Extender控件    }
,
使用asp.net ajax创建Extender控件  
// 释放
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件
    dispose : function()  {
使用asp.net ajax创建Extender控件        $clearHandlers(
this.get_element());
使用asp.net ajax创建Extender控件        
使用asp.net ajax创建Extender控件        Samples.FocusBehavior.callBaseMethod(
this'dispose');
使用asp.net ajax创建Extender控件    }
,


属性以get,set方法定义,set方法后面记得调用raisePropertyChanged方法

使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件    get_highlightCssClass :  function ()  {
使用asp.net ajax创建Extender控件        
return this._highlightCssClass;
使用asp.net ajax创建Extender控件    }
,
使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件    set_highlightCssClass : 
function (value)  {
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件        
if (this._highlightCssClass !== value) {
使用asp.net ajax创建Extender控件            
this._highlightCssClass = value;
使用asp.net ajax创建Extender控件            
this.raisePropertyChanged('highlightCssClass');
使用asp.net ajax创建Extender控件        }

使用asp.net ajax创建Extender控件    }
,
使用asp.net ajax创建Extender控件    
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件    get_nohighlightCssClass : 
function ()  {
使用asp.net ajax创建Extender控件        
return this._nohighlightCssClass;
使用asp.net ajax创建Extender控件    }
,
使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件    set_nohighlightCssClass : 
function (value)  {
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件        
if (this._nohighlightCssClass !== value) {
使用asp.net ajax创建Extender控件            
this._nohighlightCssClass = value;
使用asp.net ajax创建Extender控件            
this.raisePropertyChanged('nohighlightCssClass');
使用asp.net ajax创建Extender控件        }

使用asp.net ajax创建Extender控件    }


以上差不多就好了,其实还是抓住几个参数来进行设置,然后再呈现出来.上面的例子没有改变原有控件,而是创建Extender控件,你也可以扩展原有控件
.那则需要实现 IScriptControl接口.其实还是一样需要实现GetScriptReferences方法GetScriptDescriptors方法,多做的事就是需要自己手动用ScriptManager控件来注册一下.

使用asp.net ajax创建Extender控件         protected   override   void  OnPreRender(EventArgs e)
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件        
{
使用asp.net ajax创建Extender控件            
if (!this.DesignMode)
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件            
{
使用asp.net ajax创建Extender控件                
// Test for ScriptManager and register if it exists
使用asp.net ajax创建Extender控件
                sm = ScriptManager.GetCurrent(Page);
使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件                
if (sm == null)
使用asp.net ajax创建Extender控件                    
throw new HttpException("A ScriptManager control must exist on the current page.");
使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件                sm.RegisterScriptControl(
this);
使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件            }

使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件            
base.OnPreRender(e);
使用asp.net ajax创建Extender控件        }

使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件        
protected   override   void  Render(HtmlTextWriter writer)
使用asp.net ajax创建Extender控件使用asp.net ajax创建Extender控件        
{
使用asp.net ajax创建Extender控件            
if (!this.DesignMode)
使用asp.net ajax创建Extender控件                sm.RegisterScriptDescriptors(
this);
使用asp.net ajax创建Extender控件
使用asp.net ajax创建Extender控件            
base.Render(writer);
使用asp.net ajax创建Extender控件        }

最后还要记得js里面也要注册下,Extender控件为Sys.UI.Behavior,这次为Sys.UI.Control