Microsoft Asp.Net Ajax 1.0 脚本注册和UpdatePanel的事件控制(1)

来源:互联网 发布:决战武林弩炮进阶数据 编辑:程序博客网 时间:2024/06/10 04:50
我在很多的地方都看到 很多的人对微软的这个技术一直抱着观望的态度,因为这是客户端的技术,有很多选择的余地,事实上也确实有很多选择的余地,本人在asp.net ajax 1.0之前,就曾经用过ajax.net,anthem等框架,但当静下心来在asp.net项目中运用微软自身的ajax框架后,有了更深的体会,其实没有好观望的,微软以他的实力证明 ,他出的东西不弱,但也不是你想的那么“爽”,这也是微软一贯的作风,updatepanel等控件是支持视图状态的,也就是说他的效率比不上ajax.net框架,但他天然的和.net框架的结合,其使用方便又是微软技术的一大特色了,尽管anthem框架也支持视图状态,但页面控件一多buger就会层出不穷,因为他不是微软出的,asp.net ajax 1.0是必须要对.Net Freamwork打补丁的,这就从根本上得到了支持,第三方的anthem框架是很难做到这一点的。好的,实际运用中的一点体会,闲话少说,把在实际中asp.net ajax 1.0的一些东东和大家分享下

        第一

       在页面中运用updatepanel控件之后,无刷新的服务器端方法,再调用Page.ClientScript.RegisterStartupScript(this.GetType(), "key", "<script type='text/javascript'>......</script>");方法是没有效果的,

其实原因很简单,传统的postback注册脚本是在页面重新加载的时候,在客户端写短脚本,客户端浏览器呈现的时候执行的,但在运用updatepanel之后页面不存在postback脚本自然是无效了,微软同样对原有的注册类进行了拓展,新添加了注册脚本的方法

ScriptManager.RegisterArrayDeclaration();
        ScriptManager.RegisterClientScriptBlock();
        ScriptManager.RegisterClientScriptInclude();
        ScriptManager.RegisterClientScriptResource();
        ScriptManager.RegisterStartupScript();
        ScriptManager.RegisterOnSubmitStatement();
        ScriptManager.RegisterHiddenField();

这些方法和asp.net中的Page.ClientScript下的方法是一样的效果,只是用法上稍有区别,加了一个参数,第一个参数为是那个updatepanel导致更新的,即第一个参数可为this.UpdatePanel1等,当前updatepanel的ID



当然还有一个细节asp.net 2.0 中即使是传统的postback也不大用Page.ClientScript注册脚本,而是运用对象

 ClientScriptManager cls = this.ClientScript;
        cls.RegisterStartupScript();

       ......

这是标准的做法

切忌,切忌 万不可用Response.Write(......);来注册脚本,无论在什么版本下,都是严重违法的!





比如在一个updatepanel更新的方法结束的时候可以加句: ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "delete", "alert('修改成功!')", true);

当然这样写其实还是不够精确,怎么说呢,很简单,这只是完成了在服务器端的运算,对于updatepanel而言在客户端还要更新updatepanel客户端div(若updatepanel属性设成则客户端为span)中的html,应该在客户端来处理这件事情就显得更得体了



Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
   function(sender, e)
   {
    if (e.get_error())
    {
     e.set_errorHandled(true);
  alert('请求发生错误 !');   
        }
    else if (e.get_response().get_aborted())
    {
         
alert('    请求中止!')    }
    else
    {
         alert('修改成功!');

    }
   });



endRequest是update中的异步更新本身的最后一个事件,注意是本身,微软同样在客户端建立起了一个完整的事件模型,在这个事件之后还会有Sys.Net.WebRequest.completed事件 它是真正的xmlhttp对象的完成事件,这个在以后的文章中再介绍