zoukankan      html  css  js  c++  java
  • ASP.NET自定义控件开发示例(二)

    接着上次的内容。接下来我们让它的时间能不停走动。新建一个类TipTime3,新建脚本文件TipTime3.js,将TipTime2代码都复制过来。
    为了能将C#的DateTime对象转换为JS的Date,需要将该时间距离1970-1-1午夜的毫秒数传给JS。

    剩下的工作就是利用setInterval每隔1秒改变span标签的文本,略过。

    下一步要实现利用AJAX获取服务端的时间。先要让控件实现ICallbackEventHandler接口。

    该接口包含2个方法。 RaiseCallbackEvent用于处理客户端传递过来的参数,这里不需要,所以空着。 GetCallbackResult用于处理返回给客户端的数据,
    这里为了使效果明显,返回了一个随机时间。
    注意要在OnLoad方法中需要加上这一行:
    Page.ClientScript.GetCallbackEventReference(this, "", "", "");
    这样做是为了保证页面上生成了WebForm_DoCallback方法。
    剩下的工作就是客户端去调用了。WebForm_DoCallback方法的参数说明依次为:
    需要回调的控件的UniqueID
    回调的参数
    回调结束后客户端的响应事件
    回调的上下文
    回调出错后客户端的响应事件
    是否异步

    接着给按钮添加onclick事件,调用WebForm_DoCallback方法,在回调结束后的响应事件中将结果显示在span标签上就行了。
    这时我们发现如果页面回传了,控件的位置就会回到原来的位置,因此需要在每次拖动结束后将位置存储在<input type=“hidden”/>标签中。
    新建一个类TipTime4,新建脚本文件TipTime4.js,将TipTime3代码都复制过来。
    新建两个属性X,Y用来存储控件在客户端的坐标,并在RenderContents方法中输出一个Input标签,保证客户端的坐标信息在回传时还存在。

    注意这里对属性X,Y没有用ViewState存储,是因为这2两个值是存在于表单数据中,这个与TextBox控件的Text属性类似。
    对上面的input标签一定要设置name属性,不然是不会随着表单提交的。
    为了能让在回传后获取input标签的值,需要让控件实现IPostBackDataHandler接口

    LoadPostData方法用来检查提交给服务器的数据,根据控件状态数据和回发数据是否发生更改而判断是否调用RaisePostDataChangedEvent方法,
    如果返回true,则.NET Framework会自动调用RaisePostDataChangedEvent方法,在此方法中可以引发自己定义的事件。
    这里只将回发数据存储到X,Y属性中。
    接下来要在OnLoad事件中加上
    Page.RegisterRequiresPostBack(this);
    这是为了保证在回传时触发IPostBackDataHandler接口。
    然后在AddAttributesToRender方法中设置控件的left、right属性:
     

    最后在JS中拖动结束时将控件的坐标存入input标签中即可。

    最后要加的功能是到了一个时间,自动回传触发自定义事件。新建一个类TipTime,新建脚本文件TipTime.js
    将TipTime4代码都复制过来。先加一个属性,用来存储配置的定时时间:

     

    接着定义自定义事件。这上面的写法都是固定的写法。这样在设计视图就能看到该事件了

     然后实现IPostBackEventHandler接口

    在条件成立时,就执行自定义事件。
    下一步在JS中判断是否到时间了,如果是则调用__doPostBack方法来实现回传,并将控件的UniqueID作为参数传递过去,
    这样服务端才能知道是哪个控件触发的回传事件。
     

    需要注意的是必须在OnLoad方法中加上:
    Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this));
    这样页面上才会有__doPostBack方法,并且才会触发IPostBackEventHandler接口。
    至此,所有功能都实现了。

    示例代码下载
    ASP.NET自定义控件开发示例(一)

    我的网站:http://i.goto327.top:85/
  • 相关阅读:
    开启safe_mode之后对php系统函数的影响
    解析posix与perl标准的正则表达式区别
    教你在不使用框架的情况下也能写出现代化 PHP 代码
    杭州逆行崩溃小伙首度回应
    PHP命令行脚本接收传入参数的三种方式
    PHP魔术方法使用总结
    Nginx服务器的rewrite、全局变量、重定向和防盗链相关功能
    重定向
    P2141 珠心算测验
    T2695 桶哥的问题——吃桶
  • 原文地址:https://www.cnblogs.com/jintianhu/p/2019879.html
Copyright © 2011-2022 走看看