Ajax Control Toolkit 34个服务器端控件(4)

来源:互联网 发布:haproxy windows版 编辑:程序博客网 时间:2024/04/30 05:36

11. DropShadow

功能概述

阴影效果
 
 细节

(1)   Width 单位:px  默认5px

(2)   Opacity  不透明度0-1.0 默认.5

示意代码

  代码示意:
    <ajaxToolkit:DropShadowExtender ID="dse" runat="server"
        TargetControlID="Panel1" 
        Opacity=".8" 
        Rounded="true"
        TrackPosition="true" />

 

12. DynamicPopulate

【功能概述】

能实用Web Service或页面方法来动态的替换控件的内容。调用的方法返回的是一个Html的字符串,作为目标元素的子节点插入其中。
细节】

 (1)ClearContentsDuringUpdate  替换之前先清除以前的内容(默认True
  (2)PopulateTriggerControlID
触发器绑定的控件 单击时触发
  (3)ContextKey
传递给Web Service的随机字符串
  (4) Web Service
方法签名必须符合下面的形式:
                [WebMethod]
                string DynamicPopulateMethod(string contextKey)
                {...}
                Note you can replace "DynamicPopulateMethod" with a naming of your choice, but the return
                type and parameter name and type must exactly match, including case. 

(5) 我们非常欣慰的一点就是BehaviorID="dp1",这种用法是我所期望的。

(6) CustomScript 怎么用呢??This script must evaluate to a string value. ??

【示意代码】

代码示意:
<ajaxToolkit:DynamicPopulateExtender ID="dp" runat="server"
    TargetControlID="Panel1" 
    ClearContentsDuringUpdate="true" 
    PopulateTriggerControlID="Label1" 
    ServiceMethod="GetHtml" 
    UpdatingCssClass="dynamicPopulate_Updating" />
              

代码示意2
<asp:Panel ID="Panel1" runat="server" CssClass="dynamicPopulate_Normal">
        </asp:Panel>  //
要扩展的panel
<ajaxToolkit:DynamicPopulateExtender ID="dp" BehaviorID="dp1" runat="server" 
          ClearContentsDuringUpdate="true" 
          PopulateTriggerControlID="Label1"
          TargetControlID="Panel1"
          ServiceMethod="GetHtml" 
          UpdatingCssClass="dynamicPopulate_Updating">
    </ajaxToolkit:DynamicPopulateExtender>
    <script runat="server">

    [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public static string GetHtml(string contextKey) 
{
        // a little pause to mimic a latent call.
        //
        System.Threading.Thread.Sleep(250);

        string value = "";
        if (contextKey == "U") 
{
            value = DateTime.UtcNow.ToString();
        } else 
{
            value = String.Format("{0:" + contextKey + "}", DateTime.Now);
        }

        return String.Format("<span style='font-family:courier new;font-weight:bold;'>{0}</span>", value);
    }

</script>


<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script  type="text/javascript">

    function updateDateKey(value) 
{

        var behavior = $find('dp1'); //
这样使用BehaviorID可是方便多了
        if (behavior) 
{
            behavior.populate(value);// 
内部实现调用了Service
        }

    }

    Sys.Application.add_load(function()
{updateDateKey('G');});  //页面加载时要执行的脚本!

</script>

13. FilteredTextBox

【功能概述】

FilteredTextBox扩展控件用来阻止用户在文本框输入无效字符 。由于这种效果的实现是依赖于deactivating JavaScript(怎么翻译呢?),所以不要期望数据会发送到服务器端进行校验。

【细节】

(1)过滤条件Numbers LowercaseLetters UppercaseLetters   Custom

 (2)过滤条件也可以是Custom的组合 FilterType="Custom, Numbers"
    (3)ValidChars="+-=/*()." Custom
要定义这样的有效字符串

(4)这个控件我认为是聊胜于无,我们要把允许输入的数据进行枚举,太难了。事实上,这个控件在任何状态下都是接受中文的。如果使用正则表达式情形或许好些。看它的实现代码还有进一步改进的可能,学习研究中……

【示意代码】

示意代码:
<ajaxToolkit:FilteredTextBoxExtender ID="ftbe" runat="server"
        TargetControlID
="TextBox3"         
        FilterType
="Custom, Numbers"
        ValidChars
="+-=/*()." />

在该控件的实现代码中我发现了这样一段,这可能是一个突破口:

特殊键排除代码:
<   var scanCode;
                        if (evt.rawEvent.keyIdentifier) {
            
            // Safari
            // Note (Garbin): used the underlying rawEvent insted of the DomEvent instance.
            if (evt.rawEvent.ctrlKey || evt.rawEvent.altKey || evt.rawEvent.metaKey) {
                return;
            }
            
            if (evt.rawEvent.keyIdentifier.substring(0,2) !
= "U+") {
                return;
            }
            
            scanCode 
= evt.rawEvent.charCode; 
            
            
if (scanCode == 63272 /* Delete */) {
                return;
            }
        }  
        else {
            scanCode 
= evt.charCode;
        
}  
            
        if (scanCode && scanCode 
>= 0x20 /* space */) {                
            var c = String.fromCharCode(scanCode);                        
            
            if(!this._processKey(c)) {
                evt.preventDefault();
            }
        }
    }

原创粉丝点击