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

本文详细介绍了ASP.NET AJAX中的三种关键控件:DropShadow用于实现阴影效果;DynamicPopulate用于动态更新控件内容;FilteredTextBox用于过滤文本框输入,防止无效字符。文章通过示例代码展示了这些控件的具体配置和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值